Unity的输入移植指南
可以使用以下两种方法之一将输入逻辑移植到 Windows Mixed Reality:
- Unity跨多个平台的通用 Input.GetButton 或 Input.GetAxis API。
- UnityEngine.XRModule API,专门为运动控制器和 HoloLens 手提供更丰富的数据。
常规 Input.GetButton 和 Input.GetAxis API
Unity当前使用其常规 Input.GetButton
API 和 Input.GetAxis
API 公开 Oculus SDK 和 OpenVR SDK 的输入。 如果你的应用已经使用这些 API 进行输入,则这些 API 是支持 Windows Mixed Reality 中运动控制器的最简单路径。 只需在输入管理器中重新映射按钮和轴即可。
有关详细信息,请参阅Unity按钮/轴映射表和常见Unity API 概述。
重要
如果使用 HP Reverb G2 控制器,请参阅 Unity 中的 HP 混响 G2 控制器以获取进一步的输入映射说明。
XR 输入 API
Unity版本已逐步淘汰 XR。支持 XR SDK 的 WSA API。 对于新项目,最好从一开始就使用 XR 输入 API。 有关详细信息,请参阅 Unity XR 输入。
如果应用已为每个平台生成自定义输入逻辑,则可以使用 UnityEngine.InputSystem.XR 命名空间中的特定于 Windows 的空间输入 API。 这些 API 使你能够访问更多信息(例如位置准确性或源类型),以在 HoloLens 上区分手部和控制器。
注意
如果使用 HP Reverb G2 控制器,除 之外 InteractionSource.supportsTouchpad
,所有输入 API 将继续工作,后者返回 false 且没有触摸板数据。
抓地力姿势和指针姿势
Windows Mixed Reality支持不同外形规格的运动控制器。 每个控制器的设计在用户手部位置和应用在呈现控制器时用于指向的自然向前方向之间的关系上有所不同。
为了更好地表示这些控制器,可以调查每个交互源的两种姿势: 抓地力姿势 和 指针姿势。 以Unity世界坐标表示所有姿势坐标。
抓地力姿势
抓地力姿势表示 HoloLens 检测到的手掌位置,或手掌握有运动控制器的位置。 在沉浸式头戴显示设备上,使用此姿势呈现用户的手或用户手中拿着的对象,如剑或枪。
- 抓地力位置是自然握住控制器时的手掌质心,向左或向右调整以将手柄内的位置居中。
- 抓地力方向的右轴是手掌正常光线,从左手掌向前,从右手掌向后,当你完全张开手形成一个扁平的五指姿势时。
- 抓地力方向的前向轴是当你部分闭合手时,通过非拇指手指形成的管向前指向的光线,就像拿着控制器一样。
- 抓地力方向的向上轴是右向和向前定义所暗示的向上轴。
通过Unity的 XR 访问抓地力姿势。InputTracking.GetNodeStates API,如 XRNodeState.TryGetPosition 或 XRNodeState.TryGetRotation。
指针姿势
指针姿势表示控制器向前指尖。 呈现控制器模型本身时,此姿势最适合用于光线投射指向 UI。
指针姿势在 Unity中只能通过特定于 Windows MR 的 API sourceState.sourcePose.TryGetPosition/Rotation
(作为 参数传入InteractionSourceNode.Pointer
)提供。