核心系统 - MRTK2

输入系统的核心是 InputSystem,它是一项服务,负责初始化和操作与 MRTK 关联且与输入相关的所有功能。

注意

假设读者已经阅读并大致了解术语部分。

此服务负责:

  • 读取输入系统配置文件
  • 启动配置的数据提供程序(例如 Windows Mixed Reality Device ManagerOpenVR Device Manager)。
  • GazeProvider 实例化,它是一个组件,负责提供 HoloLens(第一代)样式头部凝视信息和 HoloLens 2 样式眼部凝视信息。
  • FocusProvider 实例化,它是负责确定具有焦点的对象的组件。 有关详细信息,请参阅本文档的指针和焦点部分。
  • 为所有输入事件提供注册点(作为全局侦听器)。
  • 为这些输入事件提供事件调度功能。

输入事件

输入事件通常在两个不同的通道上触发:

焦点对象

可直接将事件发送到具有焦点的 GameObject。 例如,对象可能有实现 IMixedRealityTouchHandler 的脚本。 当手放在对象附近产生焦点时,该对象会获得触摸事件。 这些类型的事件会在 GameObject 层次结构中“上移”,直到它找到能够处理事件的 GameObject 为止。

为此,会从默认输入系统实现内部使用 ExecuteHierarchy

全局侦听器

可将事件发送到全局侦听器。 可使用输入系统的 IMixedRealityEventSystem 接口注册所有输入事件。 建议使用 RegisterHandler 方法来注册全局事件 - 已弃用的 Register 函数将导致侦听器就所有输入事件收到通知,而不是仅收到特定类型的输入事件(其类型由事件接口定义)的通知。

请注意,回退侦听器是另一种类型的全局侦听器,我们也不建议使用它们,因为它们将接收未在场景中其他位置处理的每一个输入事件。

事件调度顺序

通常,事件按照以下方式发送到侦听器。 请注意,如果以下任一步骤将事件标记为已处理,则事件调度进程将停止。

  1. 事件发送到全局侦听器。
  2. 事件发送到焦点对象的模式对话。
  3. 事件发送到焦点对象。
  4. 事件发送到回退侦听器。

设备管理器和数据提供程序

这些实体负责与较低级别的 API(例如 Windows Mixed Reality API 或 OpenVR API)进行交互,并将来自这些系统的数据转换到适合 MRTK 更高级别输入抽象的系统中。 它们负责检测、创建和管理控制器的生存期。

设备管理器的基本流程涉及:

  1. 设备管理器由输入系统服务实例化。
  2. 设备管理器向其基础系统注册(例如,Windows Mixed Reality 设备管理器将注册输入手势事件)。
  3. 它创建从基础系统发现的控制器(例如,提供程序可检测是否存在铰接式手部)
  4. 在其 Update() 循环中,调用 UpdateController() 来轮询基础系统的新状态并更新其控制器表示形式。