使用基于动作的输入系统从外部 VR Rig 读取控制器数据

Read controller data from outside VR Rig with action based input system

我在使用 Unity OpenXR 中基于动作的新输入系统时遇到问题。

使用旧的(基于设备的)输入系统,可以使用 InputDevices.GetDeviceAtXRNode(<node>) 函数从 XR Rig 外部检索输入设备对象。

例如:这是我在旧系统中检索右手控制器位置数据的方法:

InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.devicePosition, out Vector3 position);
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.deviceRotation, out Quaternion rotation);

不幸的是,我找不到用新的基于操作的输入系统做同样事情的方法。我能找到的关于这个主题的所有文档都指的是旧方法。看来这个方法不行了

那么,有没有办法使用新的基于动作的输入系统从 XR Rig 外部检索输入设备?

以防万一:我的 Unity 版本是 2020.3.4f1,我使用的是 OpenXR 插件版本 1.0.3

非常感谢任何帮助。

ActionBasedController[] controllerArray = ActionBasedController.FindObjectsOfType<ActionBasedController>();
ActionBasedController controller = controllerArray[0];

通过调用此方法,您可以将所有 ActionBasedControllers 作为数组返回。可以通过名称识别控制器。

controller.name.Equals("Left Controller")

可以通过以下命令读取触发值:

//Position
controller.positionAction.action.ReadValue<float>();
//Trigger
controller.activateAction.action.ReadValue<float>();
//Grip
controller.selectAction.action.ReadValue<float>();