是否有 GazeManager.Instance.HitInfo.collider 但不透明 WMR 耳机上的 motioncontroller 指针射线而不是 HoloLens 上的相同?

Is there a GazeManager.Instance.HitInfo.collider but for motioncontroller pointer ray on opaque WMR headsets instead of the same on HoloLens?

我想知道当使用带有遮挡的 windows 混合现实耳机的控制器时,是否有内置的混合现实工具包方法来检查 MRTK-Unity 可视化的运动控制器投射的光线是否是光线投射有什么存在吗?

当使用 GazeManager.Instance.HitInfo.collider != null 条件时,我可以在 HoloLens 上轻松检查这一点,但由于 Gaze Manager 属于 Gaze 而不是 MotionControllers 我不能使用它(至少以我知道的方式)来检查由运动控制器投影光线控制的默认光标是否正在 projected/raycsted 到某物上 UI 或不(可能稍后是什么)?

P.S。我看到 MRTK-Unity v2 计划在输入管理器 class 中组合所有指针(凝视和 controllers/hands),但除非我错了,否则 HoloLens v1 不可用,我的意思是能够获得控制器的指针,因为我查看了 v1 的 InputManager 预制件,但找不到类似的东西......对吗?

可以使用 Physics.Raycast() with parameters from a motion controller. The parameters can be taken from 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;
             // ...
         }
     }
}

我不熟悉 MRTK v1 的方法,但在 MRTK v2 中,如果我理解正确的话,对于您的用例来说,一种或多或少直接的方法是使用连接到运动控制器的 MRTK 指针.该指针每帧执行一次光线投射并将结果存储在 IMixedRealityPointer.Result 中。您可以通过脚本中的 IMixedRealityPointerHandler 侦听指针事件或通过 IMixedRealityInputSystem.DetectedInputSources.

手动迭代所有指针来访问数据