首页 > 解决方案 > 为什么我的 Unity/MRTK 应用程序中的 HoloLens1 上的“空中点击”手势不起作用?

问题描述

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

统一:2018.4.x

MRTK : v2.1 / v2.2

统一场景设置

当我使用上述设置运行场景时,空中点击在 Unity 编辑器中注册(通过按空格键 + 单击来模拟),但它没有在 HoloLens1 中注册。

我缺少设置的某些部分吗?也许要在我的场景中添加另一个输入组件?

标签: unity3dhololensmrtk

解决方案


要响应来自 MRTK 的点击事件,您需要侦听MRTK 指针事件,而不是 MRE 可能侦听的 Unity 输入事件。一个很好的监听事件是OnPointerClicked事件,当手被点击,或者当一个运动控制器被点击,或者如果你说“选择”这个词时,它就会触发。通常,输入处理程序仅在您将鼠标悬停在对象上时才会响应,因此要全局响应这些输入,您需要注册为全局输入处理程序。

这是一个脚本示例,每当单击指针时将打印一些文本:

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);
    }
}

您可以在此处了解有关指针MRTK 输入系统的更多信息


推荐阅读