为什么 'air tap' 手势在我的 Unity/MRTK 应用中的 HoloLens1 上不起作用?

Why is 'air tap' gesture not working on HoloLens1 in my Unity/MRTK app?

我有一个 Unity 应用程序,我想将其与 Microsoft 混合现实工具包 (MRTK) 集成。当我将 MRTK(v2.1 或 v2.2)包添加到我的 Unity 项目时,我可以在 Unity 编辑器中模拟 "air tap" 手势,应用程序会注册点击。但是,当我将应用程序发布到我的 HoloLens1(或 运行 Unity 中的全息模拟器)时,"air tap" 手势没有注册点击。

团结: 2018.4.x

MRTK: v2.1 / v2.2

Unity场景设置:

当我运行上面设置的场景时,air tap在Unity Editor中注册(按space栏+点击模拟),但在HoloLens1中没有注册.

我是否遗漏了某些设置? 也许要在我的场景中添加另一个输入组件?

要响应来自 MRTK 的点击事件,您需要监听 MRTK pointer events 而不是 MRE 可能监听的 Unity 输入事件。 OnPointerClicked 事件是一个很好的监听事件,它会在手被轻敲、运动控制器被点击,或者你说出单词 "select" 时触发。通常情况下,输入处理程序只会在您将鼠标悬停在对象上时做出响应,因此要全局响应这些输入,您需要注册为全局输入处理程序。

下面是一个脚本示例,只要单击指针就会打印一些文本:

using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine;

public class DetectTapExample : MonoBehaviour
{

    public void Start()
    {
        PointerHandler pointerHandler = gameObject.AddComponent<PointerHandler>();
        pointerHandler.OnPointerClicked.AddListener((evt) => Debug.Log("Tap Detected " + Time.time));
        // Make this a global input handler, otherwise this object will only receive events when it has input focus
        CoreServices.InputSystem.RegisterHandler<IMixedRealityPointerHandler>(pointerHandler);
    }
}

您可以了解更多 Pointers here and the MRTK Input System here