输入系统术语 - MRTK2

输入系统是 MRTK 提供的所有功能中的最大系统之一。 工具包中的许多内容(指针、焦点、预制件)都是基于它构建的。 输入系统内的代码允许进行自然交互(例如跨平台抓取和旋转)。

输入系统有一些它自己的值得定义的术语:

  • 数据提供程序

    输入配置文件中的输入设置会引用称为数据提供程序的实体 - 另一个描述它的单词是设备管理器。 这些组件的工作是通过与特定的基础系统进行连接来扩展 MRTK 输入系统。 提供程序的一个示例是 Windows Mixed Reality 提供程序,其工作是与基础的 Windows Mixed Reality API 通信,然后将这些 API 的数据转换为下面的特定于 MRTK 的输入概念。 另一个示例是 OpenVR 提供程序(其工作是与 Unity 抽象版 OpenVR API 通信,然后将该数据转换为 MRTK 输入概念)。

  • 控制器

    物理控制器的表现形式(不管是 6 自由度控制器、具有手势支持的 HoloLens 1 样式手、完全铰接式手还是体感控制器,等等)。 控制器由设备管理器生成(例如,WMR 设备管理器在看到一个铰接式手出现时,会生成一个控制器并管理其生存期)。

  • 指针

    控制器使用指针与游戏对象交互。 例如,近距交互指针负责检测手(即控制器)何时靠近那些将自身播发为支持“近距交互”的对象。 指针的其他示例包括传送或远距指针(例如,shell 手部射线指针),此类指针使用远距光线投射与那些超出用户手臂长度的内容进行交互。

    指针由设备管理器创建,然后附加到输入源。 若要获取控制器的所有指针,请执行以下命令:controller.InputSource.Pointers

    请注意,控制器可以同时与许多不同的指针关联。 为了确保这不会造成混乱,可通过一个指针协调器来控制哪些指针可以处于活动状态(例如,当检测到近距交互时,协调器会禁用远距交互指针)。

  • 侧重点

    将指针事件发送到焦点处的对象。 焦点选择因指针类型而异;手部射线指针将使用光线投射,而戳击指针将使用球体投射。 对象必须实现 IMixedRealityFocusHandler 才能接收焦点。 可以全局注册对象以接收未筛选的指针事件,但不建议采用这种方法。

    更新哪个对象处于焦点的组件是 FocusProvider

  • 游标

    与某个指针关联的实体,围绕指针交互提供其他视觉提示。 例如,FingerCursor 将围绕手指渲染一个环,当手指接近“近距可交互”对象时,可能会旋转该环。 一个指针一次可以与一个游标相关联。

  • 交互和操作

    可以使用交互或操作脚本来标记对象。 这可以通过 Interactable 或类似 NearInteractionGrabbable/ManipulationHandler 的机制实现。

    例如,NearInteractionGrabbable 和 NearInteractionTouchable 允许某些指针(尤其是近距交互指针)知道可以聚焦哪些对象。

    Interactable 和 ManipulationHandler 是侦听指针事件以修改 UI 视觉对象或移动/缩放/旋转游戏对象的组件的示例。

下图捕获了 MRTK 输入堆栈的高级累积(从下到上):

Input System Diagram