Руководство по переносу логики ввода для Unity
Вы можете перенести входную логику в Windows Mixed Reality, используя один из двух подходов:
- Общие API-интерфейсы Unity Input.GetButton или Input.GetAxis , которые охватывают несколько платформ.
- API-интерфейсы UnityEngine.XRModule, которые предлагают более широкие данные специально для контроллеров движения и рук HoloLens.
Общие API Input.GetButton и Input.GetAxis
В настоящее время Unity использует свои общие Input.GetButton
api и Input.GetAxis
API для предоставления входных данных для пакета SDK Oculus и Пакета SDK OpenVR. Если ваши приложения уже используют эти API для ввода, эти API являются самым простым способом поддержки контроллеров движения в Windows Mixed Reality. Вам просто нужно переназначить кнопки и оси в диспетчере ввода.
Дополнительные сведения см . в таблице сопоставления кнопок и осей Unity и обзоре общих API Unity.
Важно!
Если вы используете контроллеры HP Reverb G2, дополнительные инструкции по сопоставлению входных данных см . в разделе Контроллеры HP Reverb G2 в Unity .
Интерфейсы API ввода XR
В выпусках Unity был прекращен XR. API WSA в пользу пакета SDK для XR. Для новых проектов лучше использовать входные API XR с самого начала. Дополнительные сведения см. в разделе Входные данные XR Unity.
Если приложение уже создает пользовательскую логику ввода для каждой платформы, можно использовать API пространственного ввода для Windows в пространстве имен UnityEngine.InputSystem.XR . Эти API позволяют получить доступ к дополнительным сведениям, таким как точность положения или тип источника, чтобы отличить руки и контроллеры в HoloLens.
Примечание
Если вы используете контроллеры HP Reverb G2, все входные API продолжают работать, за исключением InteractionSource.supportsTouchpad
, который возвращает значение false без данных сенсорной панели.
Положение захвата и положение указателя
Windows Mixed Reality поддерживает контроллеры движения в разных форм-факторах. Дизайн каждого контроллера отличается своей связью между положением руки пользователя и естественным направлением вперед, которое приложения используют для указания при отрисовке контроллера.
Чтобы лучше представить эти контроллеры, можно исследовать два типа позы для каждого источника взаимодействия: позу захвата и позу указателя. Вы выражаете все координаты положения в мировых координатах Unity.
Поза захвата
Поза захвата представляет расположение ладони, обнаруженной HoloLens, или ладони, удерживающего контроллер движения. На иммерсивных гарнитурах используйте эту позу для отрисовки руки пользователя или объекта, удерживаемого в руке пользователя, например меча или пистолета.
- Положение захвата — это центроид ладони при естественном удержании контроллера влево или вправо, чтобы центрировать положение в захвате.
- Правая ось ориентации захвата — это луч, который является нормальным для вашей ладони, вперед от левой ладони, назад от правой ладони, когда вы полностью открываете руку, чтобы сформировать плоскую позу с пятью пальцами.
- Ось сцепления вперед — это луч, который указывает вперед через трубку, сформированную пальцами без большого пальца, когда вы частично закрываете руку, как будто удерживая контроллер.
- Ориентация захвата вверх по оси — это ось вверх, подразумеваемая определениями справа и вперед.
Получите доступ к позе захвата через XR Unity. Api InputTracking.GetNodeStates , например XRNodeState.TryGetPosition или XRNodeState.TryGetRotation.
Положение указателя
Поза указателя представляет кончик контроллера, указывающего вперед. Эту позу лучше всего использовать для приведения лучей, указывающих на пользовательский интерфейс при отрисовке самой модели контроллера.
Положение указателя доступно в Unity только через API windows MR, sourceState.sourcePose.TryGetPosition/Rotation
который передается в InteractionSourceNode.Pointer
качестве аргумента.