Unity 的输入移植指南

可以使用两种方法之一将输入逻辑移植到 Windows Mixed Reality:

通用 Input.GetButton 和 Input.GetAxis API

Unity 目前使用其通用 Input.GetButtonInput.GetAxis API 公开 Oculus SDKOpenVR SDK 的输入。 如果你的应用已使用这些 API 进行输入,则这些 API 是支持 Windows Mixed Reality 中运动控制器的最便捷路径。 只需要在输入管理器中重新映射按钮和轴即可。

有关详细信息,请参阅 Unity 按钮/轴映射表通用 Unity API 概述

重要

如果使用 HP Reverb G2 控制器,请参阅 Unity 中的 HP Reverb G2 控制器来获取进一步的输入映射说明。

XR 输入 API

Unity 版本已逐步淘汰 XR.WSA API,转而支持 XR SDK。 对于新项目,最好一开始就使用 XR 输入 API。 有关详细信息,请参阅 Unity XR 输入

如果应用已为每个平台生成自定义输入逻辑,则可以在 UnityEngine.InputSystem.XR 命名空间中使用特定于 Windows 的空间输入 API。 通过这些 API,可以访问更多信息,例如位置准确性或源类型,便于区分 HoloLens 上的双手操作和控制器操作。

注意

如果使用 HP Reverb G2 控制器,则除 InteractionSource.supportsTouchpad 之外(会返回 false 且无触摸板数据),所有输入 API 仍正常运作。

抓握姿势和指向姿势

Windows Mixed Reality 支持不同外形规格的运动控制器。 每个控制器设计的不同之处在于用户手部位置与应用呈现控制器时用于指向的自然“向前”方向之间的关系。

为了更好地表示这些控制器,可以针对每个交互源调查两种类型的姿势:抓握姿势和指向姿势。 在 Unity 世界坐标中表达所有姿势坐标。

抓握姿势

抓握姿势表示 HoloLens 检测到任一手掌的位置,或持有运动控制器的手掌。 在沉浸式头戴显示设备中,使用此姿势呈现用户手部或用户手部中持有的对象,例如剑或枪。

  • 抓握位置是然持有控制器时的手掌质心,向左或向右调整以使位置在抓握范围内
  • 抓握方向的右轴是当完全打开手部以形成平展的 5 指姿势时,垂直于手掌的射线(指向左手掌前方,指向右手掌后方)
  • 抓握方向的前轴是当半握拳时(就如同持有控制器一样),通过手指关节形成的管道指向“前方”的光线
  • 抓握方向的上轴:向右和向前定义隐含的上轴

通过 Unity 的 XR.InputTracking.GetNodeStates API,如 XRNodeState.TryGetPositionXRNodeState.TryGetRotation,访问抓握姿势。

指向姿势

指向姿势表示指向前方的控制器指针。 在呈现控制器模型本身时,此姿势最适合在指向 UI 时进行光线投射。

在 Unity 中只能通过特定于 Windows MR 的 API sourceState.sourcePose.TryGetPosition/Rotation(作为参数传入 InteractionSourceNode.Pointer)使用指向姿势。

另请参阅