核心系统

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

备注

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

此服务负责:

  • 读取 输入系统配置文件
  • 例如,启动配置的 数据提供程序 (, Windows Mixed Reality Device ManagerOpenVR Device Manager) 。
  • GazeProvider的实例化,它是一个组件,该组件负责提供第一代 (HoloLens 第一代) 样式的眼睛信息,以及 HoloLens 2 样式的眼睛信息。
  • FocusProvider的实例化,它是负责确定具有焦点的对象的组件。 文档的 指针和焦点 部分更深入地介绍了这种情况。
  • 为所有输入事件提供注册点, (作为 全局侦听器) 。
  • 为这些输入事件提供事件调度功能。

输入事件

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

焦点对象

事件可以直接发送到具有焦点的 GameObject。 例如,对象可能具有实现的脚本 IMixedRealityTouchHandler 。 当焦点在其附近时,此对象将获得触控事件。 这些类型的事件将 "向上" GameObject 层次结构,直到找到能够处理事件的 GameObject。

这是通过从默认输入系统实现中使用 ExecuteHierarchy 来完成的。

全局侦听器

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

请注意, 后备侦听器 是另一种类型的全局侦听器,这也是不鼓励的,因为它们将接收每个未在场景中的其他位置处理的单个输入事件。

事件调度的顺序

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

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

设备管理器和数据访问接口

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

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

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