Как переместить объект с помощью контроллера движения

Используя сценарии MRTK V2 и C#, мне нужно захватить и переместить объект (скажем, куб) вокруг камеры, на то же расстояние, на котором он был захвачен, и чтобы куб был направлен в сторону камеры, чтобы изначально оставаться перпендикулярным камере. Я не знаю, ясно ли мне...

Я не нашел какого-то "захватывающего" примера MRTK v2, как это было в оригинальном MRTK, поэтому мне интересно, как на самом деле это запрограммировать. Я хочу влиять на преобразование объекта, а не только использовать "интерактивный" скрипт.

Я смог прочитать преобразование контроллера в начале и в конце движения, но мне интересно, как повлиять на преобразование целевого объекта, чтобы он оставался на фиксированном расстоянии от контроллера и оставался перпендикулярно контроллер (выбранное лицо по-прежнему обращено к камере).

Я пытался повлиять на преобразование целевого объекта и искал правильный расчет, но безуспешно.

Любая идея, где я мог бы начать искать?

2 ответа

Решение

Вы можете добавить ManipulationHandler к объекту, который вы хотите переместить. Вот несколько примеров шагов:

  1. Добавьте Box Collider к объекту, который вы хотите переместить.
  2. Добавьте ManipulationHandler ваш объект
  3. Чтобы объект сохранял свое первоначальное вращение относительно вас, установите "Режим поворота одной рукой на большее" на "Поддерживать вращение на Пользователе".
  4. Если вы также хотите иметь возможность захватить объект напрямую (это для VR и HoloLens 2), то добавьте компонент NearInteractionGrabbable к вашему объекту.

Вот пример конфигурации, которую я должен сделать кубом подвижным:

Для примера того, как используется ManipulationHandler, см. Объекты Lunar Module или Cheese в сцене HandInteractionExamples по адресу Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes\HandInteractionExamples.unity

В дополнение к ответу Джулии, приведенному выше, чтобы приблизиться к выполнению вашего требования: "... чтобы оно оставалось на фиксированном расстоянии от контроллера...", установите "Ограничение на движение" на "Фиксированное расстояние от головы". Я знаю, что это не полностью отвечает вашим заявленным требованиям, но может быть достаточно близко.

Если вам действительно нужно выполнить все ваши заявленные требования, вам, возможно, придется подумать о реализации пользовательского "Солвера".

Другие вопросы по тегам