从 MRTK2 迁移到 MRTK3 的概念指南

在开始使用 MRTK3 时,你会发现 MRTK v2 中有几个概念已被更改、替换或删除。 这是因为 MRTK3 使用 Unity 的 XR 交互工具包 (XRI) 框架来处理交互,并使用 Unity 输入系统和 OpenXR 来处理输入。 本文档帮助弥补 MRTK v2 概念与其 MRTK3 对应概念之间的差距。

重要

对于不熟悉 XRI 的开发人员而言,建议先查看 Unity 的 XRI 体系结构文档。 所有 XRI 文档也适用于 MRTK3,因为大多数交互和输入功能都是直接从 XRI 继承的。

术语

MRTK v2 术语 MRTK3 术语 说明
指针 交互器 交互器在可交互对象上执行交互。 某些(但并非全部)交互器由控制器驱动,它们通过控制器接收输入操作和姿势。 其他交互器独立于控制器运行。

在 Unity 已提供的基本交互器之上,MRTK 随附了多个自定义交互器,它们提供有用的混合现实交互。 可以通过继承或通过实现交互器接口(IXRHoverInteractorIXRSelectInteractor 等)来生成自定义交互器。 有关详细信息,请参阅交互器体系结构文档
NearInteractionGrabbable, NearInteractionTouchable, IMixedRealityPointerHandler 可交互 可交互对象是交互的接收方。 在 Unity 已提供的基本可交互对象之上,MRTK 随附了多个自定义可交互对象,它们提供有用的混合现实交互。 可以通过继承或通过实现可交互对象接口(IXRHoverInteractableIXRSelectInteractable 等)来生成可交互对象。 有关 MRTK 如何扩展 XRI 可交互对象的详细信息,请参阅可交互对象体系结构文档
控制器 控制器 ActionBasedController 是 Unity 输入操作的集合,代表与特定设备关联的绑定。 输入操作的集合可以派生自多个设备,因为 ActionBasedControllers 与基础输入设备之间不存在 1:1 的关系。 (DeviceBasedController 是输入设备的 1:1 映射,但我们不使用它们。)

许多交互器(特别是 ControllerBasedInteractor)在控制器上侦听输入操作,换句话说,XRController 下的所有 ControllerBasedInteractor 将共享同一个选择操作。
传送系统 位移系统 位移系统允许用户在 XR 体验中围绕场景移动。 MRTK v2 的系统允许基本的传送和位移热点,并针对传送光标和指针行为提供很高程度的可自定义性。 XRI 为位移提供以下附加功能:
  • 以固定角度旋转装备的贴靠旋转提供程序
  • 不断地平稳地旋转装备的连续旋转提供程序
  • 不断地平稳地移动装备的连续移动提供程序
聚焦提供程序 XR 交互管理器 XRInteractionManager 是在场景中充当交互器与可交互对象之间的中介的 Unity 机制。 Unity XRInteractionManager 同步并仲裁交互器与可交互对象之间的所有交互,与旧版聚焦提供程序相比,它可以实现更大的灵活性。
指针调解器 交互模式管理器 新的交互模式管理器用于根据场景中的上下文启用/禁用交互器集。 有关详细信息,请参阅模式管理器文档
SceneQuerymask 交互层 XRI 交互层允许开发人员筛选哪些交互器可以对哪些可交互对象进行操作。 这些层与 Unity 物理层不同。
焦点 悬停 当可交互对象是交互器的有效目标时,交互器将针对可交互对象发出“悬停”。 一般情况下,“悬停”表示交互器的意图,例如用光线瞄准、用手靠近以抓取,或者用户是否正在注视对象。
选择/戳击/抓取/语音等。 Select 当可交互对象既是有效目标,也是交互器选择的目标时,交互器将针对可交互对象发出“选择”。 ControllerBasedInteractor 通常在其对应控制器的选择输入操作触发时发出“选择”。 其他交互器可能使用更复杂的逻辑来确定何时应向目标可交互对象发出“选择”。

MRTK v2 使用不同的事件和代码路径来处理不同类型的交互,换句话说,抓取是与光线单击或戳击根本不同的交互,它由不同的系统生成。 在 MRTK3 中,所有这些“选择”对象的方式都统一在同一个“选择”交互下。

我们强烈反对开发人员生成依赖于特定交互类型的交互逻辑;相反,应编写能够以常规方式响应所有“选择”的通用代码。 这样,交互就可以在所有输入模态下正常进行,甚至对于尚未开发的交互类型也是如此。 请参阅可交互对象体系结构,进一步了解我们不推荐此课程的原因。
空值 激活 “激活”是一个附加的操作,可以针对已选择的对象引发。 例如,如果用户使用控制器的手柄选择了喷枪,则触发器将使用“激活”操作发射喷枪。
数据提供程序 XRSubsystem + 提供程序 大部分数据提供程序在 MRTK3 中不再需要用到,因为 Unity 输入系统和 OpenXR 将处理大部分跨平台输入任务。 但是,对于 Unity 尚未涵盖的一些非寻常任务,我们提供了可以跨不同平台提供数据的 XRSubsystem,例如 HandsAggregatorSubsystemSpeechSubsystem。 有关子系统方法的其他概念性阅读材料,请参阅子系统体系结构文档

事件

MRTK v2 术语 XRI 术语 注释
OnFocusEnter/Exit FirstHoverEnter
LastHoverExit
请注意 FirstLast 前缀。 这些内容包含在事件名称中,因为任意数量的交互器可以同时悬停在某个可交互对象上。 还可以使用 HoverEnterHoverExit 侦听每个悬停进入/退出操作,不过,这不如监视整体悬停状态有用。
OnPointerDown/Up FirstSelectEnter
LastSelectExit
请注意 FirstLast 前缀。 这些内容包含在事件名称中,因为任意数量的交互器可以同时选择某个可交互对象(根据选择模式)。 还可以使用 SelectEnterSelectExit 侦听每个选择进入/退出操作,不过,这不如监视整体选择状态有用。
OnPointerDragged 空值 只需在选择期间使用 GetAttachTransform 轮询 interactorsSelecting 附加转换即可。 请记住,根据可交互对象的选择模式,无限数量的交互器可以选择(和操控)一个可交互对象。
OnSourcePoseChanged, OnSourceDetected, OnSourceLost 不适用 XRI 不会引发这些事件。 这些事件通过监视其关联的输入设备的 XRController 进行处理。