为什么在Unity / MRTK应用程序中的HoloLens1上无法使用“空中敲击”手势?

时间:2019-12-27 15:14:12

标签: unity3d hololens mrtk

我有一个Unity应用程序,希望与Microsoft Mixed Reality Toolkit(MRTK)集成。当我将MRTK(v2.1或v2.2)程序包添加到我的Unity项目中时,我可以在Unity编辑器中模拟“空中敲打”手势,并且该应用会记录该点击。但是,当我将应用程序发布到我的HoloLens1(或在Unity中运行全息仿真器)时,“空中点击”手势不会注册点击。

团结:2018.4.x

MRTK :均为v2.1 / v2.2

统一场景设置

  • 具有一个带有独立输入模块的EventSystem
  • 具有一个作为主摄像机的角色
  • 已导入MRTK
  • “混合现实工具包配置文件”设置为DefaultHoloLens1ConfigurationProfile

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

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

1 个答案:

答案 0 :(得分:1)

要响应来自MRTK的点击事件,您需要监听MRTK pointer events,而不是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);
    }
}

您可以详细了解Pointers hereMRTK Input System here