输入系统是 MRTK 提供的所有功能中最大的系统之一。 工具包中的许多内容在其之上构建, (指针、焦点、预制件) 。 输入系统中的代码允许跨平台进行抓取和旋转等自然交互。
输入系统有自己的一些术语值得定义:
数据提供程序
输入配置文件中的输入设置引用了称为数据提供程序的实体, 另一个描述这些实体的词是设备管理器。 这些组件的工作是通过与特定基础系统的接口来扩展 MRTK 输入系统。 提供程序的一个示例是Windows Mixed Reality提供程序,其工作是与基础Windows Mixed Reality API 通信,然后将这些 API 中的数据转换为以下特定于 MRTK 的输入概念。 另一个示例是 OpenVR 提供程序 (其工作是与 openVR API 的Unity抽象版本通信,然后将该数据转换为 MRTK 输入概念) 。
控制者
物理控制器的表示形式 (它是否为 6 自由度控制器、具有手势支持的 HoloLens 1 样式的手、完全关节的手、跳跃运动控制器等 ) 。 控制器由设备管理器生成 (即,当 WMR 设备管理器看到关节手) 存在时,它将生成控制器并管理其生存期。
指针
控制器使用指针与游戏对象交互。 例如,近距交互指针负责检测手 ((控制器) )何时靠近自称为支持“近距交互”的对象。 指针的其他示例包括传送或远距离指针 (即 shell 手部射线指针) ,该指针使用远射投射来参与用户超过手臂长度的内容。
指针由设备管理器创建,然后附加到输入源。 若要获取控制器的所有指针,请执行以下作:
controller.InputSource.Pointers
请注意,控制器可以同时与许多不同的指针相关联。 为了确保这不会陷入混乱,有一个指针中介控制哪些指针被允许处于活动状态 (例如,当检测到近距交互) 时,中介器将禁用远距离交互指针。
重点
指针事件将发送到 焦点中的对象。 焦点选择将因指针类型而异;手部射线指针将使用光线投射,而戳指针将使用球体投射。 对象必须实现 IMixedRealityFocusHandler 才能接收焦点。 可以全局注册对象以接收未筛选的指针事件,但不建议使用此方法。
用于更新焦点中的对象的组件是 FocusProvider
Cursor
与指针关联的实体,该指针提供有关指针交互的其他视觉提示。 例如,FingerCursor 将围绕手指呈现一个戒指,并在手指靠近“接近可交互”对象时旋转该戒指。 指针可以一次与单个游标相关联。
交互和作
可以使用交互或作脚本标记对象。 这可以通过
Interactable
或类似NearInteractionGrabbable
/ManipulationHandler
的内容进行。例如,NearInteractionGrabbable 和 NearInteractionTouchable 允许某些指针 (特别是附近的交互指针,) 知道哪些对象可以聚焦。
可交互和 ManipulationHandler 是侦听指针事件以修改 UI 视觉对象或移动/缩放/旋转游戏对象的组件示例。
下图捕获 MRTK 输入堆栈自下而上) (的高级构建: