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

Unity3d 使用基于动作的输入系统从外部VR装备读取控制器数据,unity3d,virtual-reality,openxr,Unity3d,Virtual Reality,Openxr,我在Unity OpenXR中使用新的基于动作的输入系统时遇到问题 使用旧的(基于设备的)输入系统,可以使用InputDevices.GetDeviceAtXRNode()函数从XR装备外部检索输入设备对象 例如:这是我在旧系统中检索右手控制器位置数据的方法: InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.devicePosition, out Vector3 position);

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

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

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

InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.devicePosition, out Vector3 position);
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.deviceRotation, out Quaternion rotation);
不幸的是,我找不到一种方法来用新的基于动作的输入系统做同样的事情。我能找到的关于这个主题的所有文档都引用了老方法。这种方法似乎不再有效

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

如果有帮助:我的Unity版本是
2020.3.4f1
,我使用的是OpenXR插件版本
1.0.3

非常感谢您的帮助

ActionBasedController[] controllerArray = ActionBasedController.FindObjectsOfType<ActionBasedController>();
ActionBasedController controller = controllerArray[0];
可通过以下命令读取触发值:

//Trigger
controller.activateAction.action.ReadValue<float>());
//Grip
controller.selectAction.action.ReadValue<float>());
//触发器
controller.activateAction.action.ReadValue());
//握
controller.selectAction.action.ReadValue());

这正是我想要的,谢谢!
//Trigger
controller.activateAction.action.ReadValue<float>());
//Grip
controller.selectAction.action.ReadValue<float>());