约束 - MRTK3

ConstraintManager 允许将一组约束组件应用于转换。 默认情况下,约束管理器会自动收集所有附加 的约束组件 ,并将其应用于目标对象。 但是,用户还可以选择手动配置应用的约束列表,并且仅允许使用附加约束的子集。

注意

MRTK3 目前提供 MRTK 2.x 的限制子集。 我们目前正在研究约束系统的重构,以将开发人员工作流与求解器和弹性统一起来。 请继续关注!

目前,以下 MRTK UX 元素支持约束:

约束管理器可以在两种模式下运行:

  • 自动约束选择
  • 手动选择约束

约束选择

自动约束选择

自动选择模式

默认的 “自动” 模式将列出所有附加的约束组件。 可以使用“转到组件”按钮直接跳转到检查器中的 组件 ,或者从下拉列表添加新约束。

手动选择约束

手动选择模式

如果约束管理器设置为手动模式,则仅处理约束列表中链接的约束并将其应用于转换。 首次启用手动模式时,管理器将使用当前附加的所有约束自动填充列表。

注意

删除条目” 作只会从手动选择列表中删除约束。 该组件仍将存在于 GameObject 上。

执行顺序

可以在约束本身的 “执行顺序 ”选项中定义每个约束的执行顺序。 该顺序将反映在约束管理器中显示的列表中。 当某些约束按不同顺序组合时,它们的行为会有所不同,因此请记住每个约束的优先级,并相应地调整其顺序。

转换约束

可以使用约束以某种方式限制作。 例如,某些应用程序可能需要旋转,并且对象保持直立。 在这种情况下, RotationAxisConstraint 可以将 添加到 对象,并用于将旋转限制为 y 轴旋转。 MRTK 提供了多个约束,所有这些约束如下所述。

还可以定义新约束,并使用它们来创建某些应用程序可能需要的唯一作行为。 为此,请创建一个从 继承 TransformConstraint 并实现 abstract ConstraintType 属性和 abstract ApplyConstraint 方法的脚本。 新约束应显示在下拉列表中,并且应在添加到 对象时自动在约束管理器中注册。

MRTK 提供的所有约束共享以下属性:

手部类型 指定约束是用于单手作、双手作还是两种作。 由于此属性是一个标志,因此可以选择这两个选项。

  • 单手作:如果选择了约束,则将在单手作期间使用。
  • 双手:如果选择了约束,则将在双手作期间使用约束。

ProximityType 指定约束是用于近、远还是两种作。 由于此属性是一个标志,因此可以选择这两个选项。

  • 距:如果选择了约束,则将在近距作期间使用约束。
  • :如果选择了“远距作”,则将使用约束。

FaceUserConstraint

此约束限制对象的旋转,使其始终面对用户。 Face Away 选项控制是使用正轴还是负 Z 轴。

FaceUserConstraint 演示

FixedDistanceConstraint

此约束固定作开始时作对象与另一个对象转换之间的距离。 这对于固定从作对象到头部转换的距离等行为非常有用。 约束转换字段默认为相机转换,是作对象将具有固定距离的另一个转换。

FixedDistanceConstraint 演示

MaintainApparentSizeConstraint

当此约束附加到对象时,无论对象离用户有多远,它都将保持与用户相同的明显大小 (即它将占用用户视野) 的相同比例。 这可用于确保板或文本面板在作时保持可读性。

MaintainApparentSizeConstraint 演示

MoveAxisConstraint

此约束可用于固定可沿哪些轴移动作对象。 这对于在平面表面或沿线条作对象非常有用。
移动约束” 字段指定要阻止移动的轴。 默认情况下,这些轴将是全局轴,而不是局部轴,但可以在下面进行更改。 由于此属性是一个标志,因此可以选择任意数量的选项。

MoveAxisConstraint 演示

MinMaxScaleConstraint

此约束限制对象的缩放比例,有助于防止用户将对象缩放到无法使用的小大小或大大小。 它适用于使用 BoundsControl) 的基于句柄的缩放 (,以及使用 ObjectManipulator) 的双手直接缩放 (。 “ 相对于初始状态 ”选项定义特定的 “最小值 ”和“ 最大”刻度 值是否为绝对值,或者它们是否在对象的初始刻度上相乘。

MinMaxScaleConstraint 演示

RotationAxisConstraint

此约束可用于修复可旋转纵对象的轴。 例如,这对于使作的对象保持直立,但仍允许 y 轴旋转非常有用。
“旋转约束”字段指定要阻止旋转的轴。 默认情况下,这些轴将是全局轴,而不是局部轴,但可以在下面进行更改。 由于此属性是一个标志,因此可以选择任意数量的选项。

RotationAxisConstraint 演示