Unity represents VR controller inputs as separate joysticks. Use the UnityEngine.Input class to access button and axis values. The OpenVR Unity integration doesn’t refer to any specific hardware when presenting axis and button states.
This page provides the axis and button mappings for the three types of controllers supported by OpenVR:
Note: Unity doesn’t support individual finger tracking information for Valve Index controllers.
正确配置和连接后,任何兼容 OpenVR 的控制器都在内部命名为 OpenVR Controller - Left 或 OpenVR Controller - Right。可在 UnityEngine.Input.GetJoystickNames() 返回的列表中访问此名称。使用 Steam 进行测试时,如果这些控制器可用,则会在 SteamVR 状态菜单中以绿色突出显示。要访问此菜单,必须在机器上安装并运行 Steam 和 SteamVR。
您可以通过脚本定期检查摇杆名称列表中是否存在这些控制器来测试其可用性。当控制器关闭或电池被移除时,UnityEngine.Input.GetJoystickNames() 返回的列表中的控制器名称将替换为空字符串。当控制器再次开启时,控制器名称将再次出现在返回的摇杆列表中。
This section provides mapping information for each type of controller that OpenVR devices supports.
下图显示了 HTC Vive 控制器上可用于 VR 应用程序的不同输入。
1 | 菜单按钮 |
---|---|
2 | 触控板 |
3 | 系统按钮 |
4 | 状态灯 |
5 | Micro-USB 端口 |
6 | 跟踪传感器 |
7 | 触发器 |
8 | 握把按钮 |
下图显示了 Oculus Touch 控制器上可用于 VR 应用程序的不同输入。
下表列出了每个 OpenVR 支持的控制器的控制器输入、它们的交互类型、Unity 轴和按钮 ID 以及每个轴的值范围。
HTC Vive 控制器 | Oculus Touch 控制器 | Valve Index Controller | 交互类型 | Unity 按钮 ID | Unity 轴 ID | Unity 轴值范围 |
---|---|---|---|---|---|---|
左控制器菜单按钮 (1) | Button.Three | 左控制器内面按钮 | 按压 | 2 | ||
右控制器菜单按钮 (1) | Button.One | 右控制器内面按钮 | 按压 | 0 | ||
左控制器外面按钮 | 按压 | 3 | ||||
右控制器外面按钮 | 按压 | 1 | ||||
左控制器触控板 (2) | Button.PrimaryThumbstick | 左控制器触控板 | 按压 | 8 | ||
右控制器触控板 (2) | Button.SecondaryThumbstick | 右控制器触控板 | 按压 | 9 | ||
左控制器触控板 (2) | Button.PrimaryThumbstick | 左控制器触控板 | 触控 | 16 | ||
右控制器触控板 (2) | Button.SecondaryThumbstick | 右控制器触控板 | 触控 | 17 | ||
左控制器触控板 (2) | Axis2D.PrimaryThumbstick | 左控制器触控板 | 水平移动 | 1 | –1.0 到 1.0 | |
左控制器触控板 (2) | Axis2D.PrimaryThumbstick | 左控制器触控板 | 垂直移动 | 2 | –1.0 到 1.0 | |
右控制器触控板 (2) | Axis2D.SecondaryThumbstick | 右控制器触控板 | 水平移动 | 4 | –1.0 到 1.0 | |
右控制器触控板 (2) | Axis2D.SecondaryThumbstick | 右控制器触控板 | 垂直移动 | 5 | –1.0 到 1.0 | |
左控制器触发器 (7) | Axis1D.PrimaryIndexTrigger | 左控制器触发器 | 触控 | 14 | ||
右控制器触发器 (7) | Axis1D.SecondaryIndexTrigger | 右控制器触发器 | 触控 | 15 | ||
左控制器触发器 (7) | Axis1D.PrimaryIndexTrigger | 左控制器触发器 | 挤压 | 9 | 0.0 到 1.0 | |
右控制器触发器 (7) | Axis1D.SecondaryIndexTrigger | 右控制器触发器 | 挤压 | 10 | 0.0 到 1.0 | |
左控制器握把按钮 (8) | Axis1D.PrimaryHandTrigger | 左控制器握把平均值 | 挤压 | 11 | 0.0 到 1.0 | |
右控制器握把按钮 (8) | Axis1D.SecondaryHandTrigger | 右控制器握把平均值 | 挤压 | 12 | 0.0 到 1.0 |
在开发支持 OpenVR 设备的应用程序时,必须注意所有这三种控制器上的按钮的输入事件触发器和响应速率存在某些差异,这一点很重要。
Unity 触控输入事件因平台控制器而异:
The grip trigger differs between HTC Vive and Oculus Touch controllers as follows:
每个 HTC Vive 控制器都有两个握把按钮,但都映射到同一个轴。这些按钮在未按下时的值为 0.0,按下时为 1.0(不允许介于 0.0 和 1.0 之间的中间值)。
Oculus Touch 控制器上的握把按钮是一个模拟触发器,范围从 0.0 到 1.0(可以使用中间值)。