Есть ли GazeManager.Instance.HitInfo.collider, но для луча указателя motioncontroller на непрозрачных гарнитурах WMR вместо того же на HoloLens? - PullRequest
0 голосов
/ 02 мая 2019

Хотелось бы узнать, существует ли что-нибудь, что встроенный в Mixed Reality ToolKit способ проверить, проецирует ли луч, проецируемый из контроллера движения, визуализируемый MRTK-Unity, при использовании контроллеров с гарнитурой смешанной реальности с окклюзированными окнами,

Я могу легко проверить это на HoloLens при использовании условия GazeManager.Instance.HitInfo.collider! = Null , но так как этот менеджер взгляда относится к Gaze вместо MotionControllers, я не могу использовать это (в по крайней мере, насколько я знаю), чтобы проверить, проецируется ли луч по умолчанию, который управляется проецируемым лучом контроллера движения, на какой-то пользовательский интерфейс или нет (и, возможно, позже)?

P.S. Я видел, что MRTK-Unity v2 планирует объединить все указатели (взгляд и контроллеры / руки) в классе диспетчера ввода, но если я не ошибаюсь, это не доступно для HoloLens v1, я имею в виду возможность получить указатель для контроллера, так как я посмотрел на префаб InputManager для v1 и не смог найти ничего подобного ... верно?

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Я не знаком со способами MRTK v1, но в MRTK v2 более или менее простой подход для вашего случая использования, если я правильно понимаю, состоит в том, чтобы использовать указатель MRTK, прикрепленный к контроллеру движения. Этот указатель выполняет raycast каждый кадр и сохраняет результат в IMixedRealityPointer.Result. Вы можете получить доступ к данным, прослушивая события указателя через IMixedRealityPointerHandler в своем скрипте или вручную перебирая все указатели через IMixedRealityInputSystem.DetectedInputSources.

0 голосов
/ 02 мая 2019

Простая передача лучей может быть реализована с использованием Physics.Raycast() с параметрами из контроллера движения.Параметры могут быть взяты из MRTK Input .Как пример

void InteractionManager_InteractionSourcePressed(InteractionSourcePressedEventArgs args)
{
     var interactionSourceState = args.state;
     var sourcePose = interactionSourceState.sourcePose;
     Vector3 sourceGripPosition;
     Quaternion sourceGripRotation;
     if ((sourcePose.TryGetPosition(out sourceGripPosition, InteractionSourceNode.Pointer)) &&
         (sourcePose.TryGetRotation(out sourceGripRotation, InteractionSourceNode.Pointer))) {
         RaycastHit raycastHit;
         if (Physics.Raycast(sourceGripPosition, sourceGripRotation * Vector3.forward, out raycastHit, 10)) {
             var targetObject = raycastHit.collider.gameObject;
             // ...
         }
     }
}
...