1.前言
- ObjectManipulator 允许使用任何输入设备或形式直观地操作 3D 空间中的对象。 它执行与 XRI XRGrabInteractable 类似的任务,但提供其他功能以及特定于混合现实的交互。 虽然 XRGrabInteractable 与交互器完全兼容(反之亦然)。
- 在 MRTK v2 中,ObjectManipulator 本身处理不同类型的输入的大部分复杂逻辑和数学。 必须为每个类型的交互维护单独的代码路径,因此在引入新类型的交互时会降低灵活性。 在 MRTK3 中,交互器负责具体说明如何将特定类型的输入转换为操作。 ObjectManipulator 只侦听这些交互器,并将相关转换应用于对象。 因此,MRTK3 中的 ObjectManipulator 在作用域内要更简单且更小得多
2.n 手操作
- ObjectManipulator 支持任意数量的参与交互器,允许跨单手、双手甚至 n 手操作的可泛化交互行为。 通常,所有参与交互器的 attachTransforms 的几何质心用于多手交互。 作为可交互的 XRI,它与任何类型的提交表现良好的附加转换的交互器兼容。
- 如果不想允许多手操作,请将 XRI Selection Mode 设置为 Single。 我们在检查器中将此属性的别名设置为更具体的名称 Multiselect Mode,以避免与 MRTK Selection Mode 混淆,后者用于指定可交互对象是否可切换。
3.约束
- ObjectManipulator 使用约束 API 来约束操作。 有关详细信息,请参阅Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
4.操作逻辑注入
- 开发人员无需为脚本设置子类或以其他方式修改脚本本身即可自定义 ObjectManipulator 的操作行为。 只需编写一个新的 ManipulationLogic ,并使用 属性在检查器 ManipulationLogicTypes 中指定类型。
- 同样,可以通过编写 的新实现 ITransformSmoothingLogic 并在检查器 TransformSmoothingLogicType 中使用 属性指定类型来自定义平滑行为。
5.属性面板解析
属性 | 描述 |
---|---|
HostTransform | 要操作的转换。默认为组件的对象。 |
AllowedManipulations | 应该允许何种操纵? |
AllowedInteractionTypes | 允许哪种类型的交互操作此对象? |
Multiselect Mode | 允许单手还是多手操作? |
RotationAnchorNear | 物物体单手接近时的旋转行为 |
RotationAnchorFar | 物体单手远距离旋转行为 |
MoveLerpTime | 输入数量代表的数量平滑适用于运动。平滑0表示没有平滑。最大值意味着不改变值。 |
RotateLerpTime | 输入表示要应用到旋转的平滑量的值。平滑0表示没有平滑。最大值意味着不改变值。 |
ScaleLerpTime | 输入表示平滑量的值以应用于刻度。平滑0表示没有平滑。最大值意味着不改变值。 |
TransformSmoothingLogicType | 用于变换间平滑的 ITransformSmoothingLogic 的具体类型 |
manipulationLogicTypes | 用于操作的操作逻辑的具体类型 |
EnableConstraints | 启用或禁用此组件的约束支持。启用后,转换更改将由链接的约束管理器进行后期处理。 |
ConstraintsManager | 约束管理器槽,以便在操作对象时启用约束。 |
SmoothingNear | 帧速率独立平滑近相互作用。注意,使近平滑可能被认为是“disconnected”从手。 |
SmoothingFar | 帧速率独立平滑用于远距离交互。远距离平滑默认启用。 |
ManipulationStarted | 开始操作手柄时触发。 |
ManipulationEnded | 结束操作手柄时触发。 |