2

我在 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

任何帮助是极大的赞赏。

4

1 回答 1

1
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>();
于 2021-05-22T14:11:57.333 回答