手势 - MRTK2
手势是基于人手的输入事件。 MRTK 中有两种类型的设备会引发手势输入事件:
Windows Mixed Reality 设备,例如 HoloLens。 它描述捏合运动(“隔空敲击”)和点击并按住手势。
有关 HoloLens 手势的详细信息,请参阅 Windows Mixed Reality 手势文档。
WindowsMixedRealityDeviceManager
包装 Unity XR.WSA.Input.GestureRecognizer 以使用来自 HoloLens 设备的 Unity 手势事件。触摸屏设备。
UnityTouchController
包装支持物理触摸屏的 Unity Touch 类。
这两种输入源都使用“手势设置”配置文件将 Unity 的触摸和手势事件分别转换为 MRTK 的输入操作。 此配置文件可以在“输入系统设置”配置文件下找到。
手势事件
通过实现以下手势处理程序接口之一来接收手势事件:IMixedRealityGestureHandler
或 IMixedRealityGestureHandler<TYPE>
(请参阅事件处理程序表)。
有关手势事件处理程序的示例实现,请参阅示例场景。
在实现泛型版本时,OnGestureCompleted 和 OnGestureUpdated 事件可以接收以下类型的类型化数据:
Vector2
- 2D 定位手势。 由触摸屏生成以告知其deltaPosition
。Vector3
- 3D 定位手势。 由 HoloLens 生成以告知:- 操作事件的
cumulativeDelta
- 导航事件的
normalizedOffset
- 操作事件的
Quaternion
- 3D 旋转手势。 可用于自定义输入源,但当前不会由任何现有输入源生成。MixedRealityPose
- 3D 定位/旋转组合手势。 可用于自定义输入源,但当前不会由任何现有输入源生成。
事件的顺序
根据用户输入,有两个主要事件链:
“按住”:
- 长按:
- 启动“操作”
- 按住时间超过 HoldStartDuration:
- 启动“按住”
- 释放点击:
- 完成“按住”
- 完成“操作”
- 长按:
“移动”:
- 长按:
- 启动“操作”
- 按住时间超过 HoldStartDuration:
- 启动“按住”
- 手部运动时间超过 NavigationStartThreshold:
- 取消“按住”
- 启动“导航”
- 释放点击:
- 完成“操作”
- 完成“导航”
- 长按:
示例场景
HandInteractionGestureEventsExample (Assets/MRTK/Examples/Demos/HandTracking/Scenes) 场景展示了如何使用指针结果在命中位置生成对象。
GestureTester
(Assets/MRTK/Examples/Demos/HandTracking/Script) 脚本是一个示例实现,用于通过 GameObject 可视化手势事件。 处理程序函数更改指示器对象的颜色,并在场景中的文本对象中显示最后记录的事件。