对象操控器 - MRTK3

Object manipulator

ObjectManipulator 允许使用任何输入设备或形式直观地操作 3D 空间中的对象。 它执行与 XRI XRGrabInteractable 类似的任务,但提供其他功能以及特定于混合现实的交互。 虽然 XRGrabInteractable 与交互器完全兼容(反之亦然),但我们仍建议你使用我们的实现来获得最佳体验。

注意

ObjectManipulator 专为直接且直观地操作 3D 对象而设计。 如果要查找常见的 UI 交互(如滑块或按钮),请参阅滑块按钮文章。 避免使用 ObjectManipulator 编写微交互。

体系结构

在 MRTK v2 中,ObjectManipulator 本身处理不同类型的输入的大部分复杂逻辑和数学。 必须为每个类型的交互维护单独的代码路径,因此在引入新类型的交互时会降低灵活性。 在 MRTK3 中,交互器负责具体说明如何将特定类型的输入转换为操作。 ObjectManipulator 只侦听这些交互器,并将相关转换应用于对象。 因此,MRTK3 中的 ObjectManipulator 在作用域内要更简单且更小得多。 有关交互器如何通过其附加转换进行通信的说明,请参阅交互器体系结构

n 手操作

ObjectManipulator 支持任意数量的参与交互器,允许跨单手、双手甚至 n 手操作的可泛化交互行为。 通常,所有参与交互器的 attachTransforms 的几何质心用于多手交互。 作为可交互的 XRI,它与任何类型的提交表现良好的附加转换的交互器兼容。

如果不想允许多手操作,请将 XRI Selection Mode 设置为 Single。 我们在检查器中将此属性的别名设置为更具体的名称 Multiselect Mode,以避免与 MRTK Selection Mode 混淆,后者用于指定可交互对象是否可切换(请参阅按钮文档以获取进一步的说明。)

Multiselect mode

约束

ObjectManipulator 使用约束 API 来约束操作。 有关详细信息,请参阅约束文档

操作逻辑注入

开发人员无需为脚本设置子类或以其他方式修改脚本本身即可自定义 ObjectManipulator 的操作行为。 只需编写一个新的 ManipulationLogic<T>,并使用 ManipulationLogicTypes 属性在检查器中指定类型。

同样,开发人员可以通过编写 ITransformSmoothingLogic 的新实现并使用 TransformSmoothingLogicType 属性在检查器中指定类型,来自定义平滑行为。

重要

如果你发现自己在为新类型的交互或输入设备编写新的操作逻辑类型,则可能走错了路径。 只要附加转换表现良好,现有操作逻辑应适用于任意输入类型。 请考虑改为调整交互器或编写新的交互器。 请阅读交互器体系结构文档可交互对象体系结构文档,详细了解如何编写表现良好的交互逻辑。