unity3d - 为什么我的 Unity/MRTK 应用程序中的 HoloLens1 上的“空中点击”手势不起作用?
问题描述
我有一个想要与 Microsoft 混合现实工具包 (MRTK) 集成的 Unity 应用程序。当我将 MRTK(v2.1 或 v2.2)包添加到我的 Unity 项目时,我可以在 Unity 编辑器中模拟“空中点击”手势,并且应用程序会注册点击。但是,当我将应用程序发布到我的 HoloLens1(或在 Unity 中运行全息模拟器)时,“空中点击”手势不会注册点击。
统一:2018.4.x
MRTK : v2.1 / v2.2
统一场景设置:
- 有一个带有独立输入模块的 EventSystem
- 有一个角色是主相机
- 已导入 MRTK
- 混合现实工具包配置文件设置为
DefaultHoloLens1ConfigurationProfile
当我使用上述设置运行场景时,空中点击在 Unity 编辑器中注册(通过按空格键 + 单击来模拟),但它没有在 HoloLens1 中注册。
我缺少设置的某些部分吗?也许要在我的场景中添加另一个输入组件?
解决方案
要响应来自 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 输入系统的更多信息
推荐阅读
- android - 如何使用 IBinder.DeathRecipient?
- javascript - jquery document.ready 函数不起作用
- cassandra - Cassandra - 达到的最大内存使用量(128.000MiB)无法分配 1.000 MiB 的块,这是什么意思?
- c++ - 如何计算存储在另一个字符串变量中的字符串变量的值
- mysql - 错误将 SQL DB 转发到 phpmyadmin 错误
- javascript - 如何导出全局工作的模块并用于 ES6 导入
- php - 创建一个具有 2 个与键相同的值的数组
- singlestore - MemSQL 非常奇怪的错误,缺少字符
- python - 只保留来自熊猫组的字典中没有 None 值的键
- java - 如何在数组中找到包含相等总和的子集: