如何使用 Windows 混合现实控制器 [MRTK2] 模拟 HoloLens 2 手部追踪?

How to mimic HoloLens 2 hand tracking wIth Windows Mixed Reality controllers [MRTK2]?

HoloLens 2 将具有手部追踪功能以及伸出和 UI 元素的能力。使用 Unity 和 Mixed Reality Toolkit V2,手部跟踪近距离交互(即戳)的输入来自 PokePointer class 并为具有 BaseNearInteractionTouchable 组件的游戏对象生成事件。

我的问题是我们如何从 Windows 混合现实控制器等虚拟现实控制器获取相同的 PokePointer 事件?这将使使用 VR 耳机在桌面上制作原型成为可能,甚至可以直接在 VR 应用程序中使用混合现实工具包的相同近距离交互。

PokePointer 组件可以附加到作为控制器模型的手游戏对象吗?或者是否有更好的方法通过 MRTK 配置文件系统来执行此操作?

实际上,可以向 VR 设备添加戳指针和抓取指针。事实上,无需可视化即可添加基本功能,甚至无需编写任何代码!

让现有的 grab 和 poke 指针与 VR 一起工作

  1. 通过在场景视图中选择 MixedRealityToolkit 对象打开您当前的指针配置文件,转到检查器 window,然后导航到输入 -> 指针。
  2. 在指针选项下,设置 PokePointer 和 Grab Pointer 的控制器类型以包括您的 VR 控制器类型(在我的例子中,它是 Windows 混合现实,尽管您可能希望使用 OpenVR)

  3. 戳指针被配置为跟随食指姿势,这在 VR 中不存在。因此,您需要打开 PokePointer.prefab 文件并在检查器中,在 Poke Poker -> Pose Action 下,将值设置为 "Pointer Pose"

  1. 点击播放。抓取指针将略低于运动控制器 Gizmo 的右侧,而戳指针将出现在原点的右边。

奖励:使用自定义指针改进抓取、戳指针

您可以通过使用自定义指针而不是默认指针来极大地改进您拥有的指针。例如,您可以:

  • 通过将 PokePointer 的 raycastorigin 字段设置为自定义变换,让 poke 指针偏离 Gizmo 原点
  • 添加视觉效果以实际显示指针所在的位置

我创建了一个示例来演示自定义抓取和戳戳指针,该指针可视化抓取和戳戳位置,并偏移戳戳位置以更加方便。您可以下载一个 unitypackage of the sample here, or just clone the mrtktips repository and look at the VRGrabPokePointers 场景。

注意:要使视觉效果实际显示,请使用以下脚本(指针当前在启动时禁用所有渲染器以避免闪烁)。

using UnityEngine;

public class EnableRenderers : MonoBehaviour
{
    void Start()
    {
        foreach (var renderer in GetComponentsInChildren<Renderer>())
        {
            renderer.enabled = true;
        }
    }
}

您可以在示例中查看自定义 MRTK 和指针配置文件的示例 here, and also in the VRGrabPokePointersUnity scene