#unity3d #virtual-reality #openxr
Вопрос:
У меня возникли проблемы с использованием новой системы ввода на основе действий в Unity OpenXR.
С помощью старой (основанной на устройстве) системы ввода можно было извлечь объект устройства ввода из-за пределов установки XR с помощью InputDevices.GetDeviceAtXRNode(<node>)
функции.
Например: Это то, что я бы сделал в старой системе для получения данных о местоположении правого контроллера:
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
, и я использую версию плагина 1.0.3
OpenXR .
Мы будем очень признательны за любую помощь.
Ответ №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>();
Комментарии:
1. Это именно то, что я искал, спасибо!