手势 - MRTK2

手势是基于人手的输入事件。 MRTK 中有两种类型的设备会引发手势输入事件:

这两种输入源都使用“手势设置”配置文件将 Unity 的触摸和手势事件分别转换为 MRTK 的输入操作。 此配置文件可以在“输入系统设置”配置文件下找到

Gesture Profile

手势事件

通过实现以下手势处理程序接口之一来接收手势事件:IMixedRealityGestureHandlerIMixedRealityGestureHandler<TYPE>(请参阅事件处理程序表)。

有关手势事件处理程序的示例实现,请参阅示例场景

在实现泛型版本时,OnGestureCompleted 和 OnGestureUpdated 事件可以接收以下类型的类型化数据

  • Vector2 - 2D 定位手势。 由触摸屏生成以告知其 deltaPosition
  • Vector3 - 3D 定位手势。 由 HoloLens 生成以告知:
  • Quaternion - 3D 旋转手势。 可用于自定义输入源,但当前不会由任何现有输入源生成。
  • MixedRealityPose - 3D 定位/旋转组合手势。 可用于自定义输入源,但当前不会由任何现有输入源生成。

事件的顺序

根据用户输入,有两个主要事件链:

  • “按住”:

    1. 长按:
      • 启动“操作”
    2. 按住时间超过 HoldStartDuration
      • 启动“按住”
    3. 释放点击:
      • 完成“按住”
      • 完成“操作”
  • “移动”:

    1. 长按:
      • 启动“操作”
    2. 按住时间超过 HoldStartDuration
      • 启动“按住”
    3. 手部运动时间超过 NavigationStartThreshold
      • 取消“按住”
      • 启动“导航”
    4. 释放点击:
      • 完成“操作”
      • 完成“导航”

示例场景

HandInteractionGestureEventsExample (Assets/MRTK/Examples/Demos/HandTracking/Scenes) 场景展示了如何使用指针结果在命中位置生成对象

GestureTester (Assets/MRTK/Examples/Demos/HandTracking/Script) 脚本是一个示例实现,用于通过 GameObject 可视化手势事件。 处理程序函数更改指示器对象的颜色,并在场景中的文本对象中显示最后记录的事件。