c# - 如何在 C# 中识别 HoloLens 手势?
问题描述
所以最近几天我在互联网上搜索了如何在 C#/Unity 中识别 HoloLens 手势(例如普通的 Tap Gesture)。
例如,我尝试了 GestureRecognizer,但它似乎已经过时,我无法让它工作。
我通过在 Unity(混合现实工具包)中模拟并按住“空格”以查看手并单击鼠标左键对其进行了测试。
这样我就可以像正常使用 HoloLens 一样与对象交互,但我无法让 GestureRecognizer 工作。
任何代码片段都会有所帮助。如果识别出单击或双击,我只是尝试记录(或稍后调用方法)。
解决方案
我认为这里有几件作品在起作用。首先,混合现实工具包的模拟手不会通过常规 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 上提交功能请求以便记录它,那就太好了。
推荐阅读
- java - 在spring boot中添加属性值的正确方法是什么
- macos - 无法在 MacOS 上安装 TypeScript - 终端错误
- reactjs - 如何在 AWS Lambda 中执行 React 应用程序的服务器端渲染
- javascript - 在javascript中,以下代码如何工作
- react-native - react-native 中的 Metro bundler 是什么?
- delphi - Delphi TThread 句柄错误
- flutter - 全局减慢 Flutter 中的动画
- c++ - C++ 11 thread_local 和“外来”线程
- swift - 显示带有非身份快速转换的preferredTransform的过滤视频文件
- asp.net-core - 我们可以回到 .net 核心中间件管道吗