约束 - MRTK3
ConstraintManager
允许将一组约束组件应用于转换。 默认情况下,约束管理器会自动收集所有附加 的约束组件 ,并将其应用于目标对象。 但是,用户还可以选择手动配置应用的约束列表,并且仅允许使用附加约束的子集。
注意
MRTK3 目前提供 MRTK 2.x 的限制子集。 我们目前正在研究约束系统的重构,以将开发人员工作流与求解器和弹性统一起来。 请继续关注!
目前,以下 MRTK UX 元素支持约束:
约束管理器可以在两种模式下运行:
- 自动约束选择
- 手动选择约束
约束选择
自动约束选择
默认的 “自动” 模式将列出所有附加的约束组件。 可以使用“转到组件”按钮直接跳转到检查器中的 组件 ,或者从下拉列表添加新约束。
手动选择约束
如果约束管理器设置为手动模式,则仅处理约束列表中链接的约束并将其应用于转换。 首次启用手动模式时,管理器将使用当前附加的所有约束自动填充列表。
注意
“ 删除条目” 作只会从手动选择列表中删除约束。 该组件仍将存在于 GameObject 上。
执行顺序
可以在约束本身的 “执行顺序 ”选项中定义每个约束的执行顺序。 该顺序将反映在约束管理器中显示的列表中。 当某些约束按不同顺序组合时,它们的行为会有所不同,因此请记住每个约束的优先级,并相应地调整其顺序。
转换约束
可以使用约束以某种方式限制作。 例如,某些应用程序可能需要旋转,并且对象保持直立。 在这种情况下, RotationAxisConstraint
可以将 添加到 对象,并用于将旋转限制为 y 轴旋转。 MRTK 提供了多个约束,所有这些约束如下所述。
还可以定义新约束,并使用它们来创建某些应用程序可能需要的唯一作行为。 为此,请创建一个从 继承 TransformConstraint
并实现 abstract ConstraintType
属性和 abstract ApplyConstraint
方法的脚本。 新约束应显示在下拉列表中,并且应在添加到 对象时自动在约束管理器中注册。
MRTK 提供的所有约束共享以下属性:
手部类型 指定约束是用于单手作、双手作还是两种作。 由于此属性是一个标志,因此可以选择这两个选项。
- 单手作:如果选择了约束,则将在单手作期间使用。
- 双手:如果选择了约束,则将在双手作期间使用约束。
ProximityType 指定约束是用于近、远还是两种作。 由于此属性是一个标志,因此可以选择这两个选项。
- 近距:如果选择了约束,则将在近距作期间使用约束。
- 远:如果选择了“远距作”,则将使用约束。
FaceUserConstraint
此约束限制对象的旋转,使其始终面对用户。 Face Away 选项控制是使用正轴还是负 Z 轴。
FixedDistanceConstraint
此约束固定作开始时作对象与另一个对象转换之间的距离。 这对于固定从作对象到头部转换的距离等行为非常有用。
约束转换字段默认为相机转换,是作对象将具有固定距离的另一个转换。
MaintainApparentSizeConstraint
当此约束附加到对象时,无论对象离用户有多远,它都将保持与用户相同的明显大小 (即它将占用用户视野) 的相同比例。 这可用于确保板或文本面板在作时保持可读性。
MoveAxisConstraint
此约束可用于固定可沿哪些轴移动作对象。 这对于在平面表面或沿线条作对象非常有用。
“ 移动约束” 字段指定要阻止移动的轴。 默认情况下,这些轴将是全局轴,而不是局部轴,但可以在下面进行更改。 由于此属性是一个标志,因此可以选择任意数量的选项。
MinMaxScaleConstraint
此约束限制对象的缩放比例,有助于防止用户将对象缩放到无法使用的小大小或大大小。 它适用于使用 BoundsControl) 的基于句柄的缩放 (,以及使用 ObjectManipulator) 的双手直接缩放 (。 “ 相对于初始状态 ”选项定义特定的 “最小值 ”和“ 最大”刻度 值是否为绝对值,或者它们是否在对象的初始刻度上相乘。
RotationAxisConstraint
此约束可用于修复可旋转纵对象的轴。 例如,这对于使作的对象保持直立,但仍允许 y 轴旋转非常有用。
“旋转约束”字段指定要阻止旋转的轴。 默认情况下,这些轴将是全局轴,而不是局部轴,但可以在下面进行更改。 由于此属性是一个标志,因此可以选择任意数量的选项。