首页 > 解决方案 > 如何在 C# 中识别 HoloLens 手势?

问题描述

所以最近几天我在互联网上搜索了如何在 C#/Unity 中识别 HoloLens 手势(例如普通的 Tap Gesture)。

例如,我尝试了 GestureRecognizer,但它似乎已经过时,我无法让它工作。

我通过在 Unity(混合现实工具包)中模拟并按住“空格”以查看手并单击鼠标左键对其进行了测试。

这样我就可以像正常使用 HoloLens 一样与对象交互,但我无法让 GestureRecognizer 工作。

任何代码片段都会有所帮助。如果识别出单击或双击,我只是尝试记录(或稍后调用方法)。

标签: c#hololensmrtkhololens-emulator

解决方案


我认为这里有几件作品在起作用。首先,混合现实工具包的模拟手不会通过常规 GestureRecognizer 发送他们的事件,这可以解释为什么您看不到那里的事件。不过,它们确实通过 MRTK 的输入系统发送输入和手势事件。您可以通过以下方式收听这些事件:

public class TapListener : MonoBehaviour, IMixedRealityGestureHandler
{
    [SerializeField]
    private MixedRealityInputAction selectAction; // You'll need to set this in the Inspector to Select

    private void OnEnable()
    {
        CoreServices.InputSystem?.RegisterHandler<IMixedRealityGestureHandler>(this);
    }

    private void OnDisable()
    {
        CoreService.InputSystem?.UnregisterHandler<IMixedRealityGestureHandler>(this);
    }

    public void OnGestureCompleted(InputEventData eventData)
    {
        if (eventData.MixedRealityInputAction == selectAction)
        {
            Debug.Log("Tap!");
        }
    }

    public void OnGestureStarted(InputEventData eventData) { }
    public void OnGestureUpdated(InputEventData eventData) { }
    public void OnGestureCanceled(InputEventData eventData) { }
}

其次,MRTK 目前不支持双击,但如果您可以在 repo 上提交功能请求以便记录它,那就太好了。


推荐阅读