约束管理器 — MRTK2
使用约束管理器,可以将一组约束组件应用于转换。 可以考虑使用附加到游戏对象的 TransformConstraint
类型的组件。
默认情况下,约束管理器将自动收集附加到游戏对象的所有约束组件,并将其应用于已处理的转换。
但是,用户可以选择手动配置应用的约束列表,只允许应用附加约束的一个子集。
目前,以下 MRTK UX 元素支持约束管理器:
检查器属性和字段
约束管理器可以在两种模式下运行:
- 自动约束选择
- 手动约束选择
自动约束选择
约束管理器的默认模式,即自动约束选择,将提供所有附加约束组件的列表,以及转到按钮和添加约束按钮。
向游戏对象添加约束
此按钮允许直接从约束管理器检查器添加约束组件。 在这里应该可以看到项目中的所有约束类型。 有关详细信息,请参阅转换约束。
转到组件
在此对象上找到的所有约束都将在此处列出,并带有“转到组件”按钮。 此按钮将导致检查器滚动到所选约束组件,以便对其进行配置。
手动约束选择
如果将束管理器设置为手动模式,则仅处理约束列表中链接的约束并将其应用于转换。 显示的列表将仅显示用户选择的约束,以及转到按钮或用于删除或添加条目的选项。 首次启用手动模式时,约束管理器将使用所有可用组件填充列表,作为选择附加约束组件的起点。
删除条目
这将从手动选择的列表中删除条目。 请注意,此选项不会从游戏对象中删除约束组件。 始终需要手动删除约束组件,以确保不会意外破坏任何其他引用该组件的组件。
添加条目
“添加条目”将打开一个下拉列表,显示还不在手动列表中的所有可用约束组件。 通过单击任何条目,该组件将被添加到手动约束选择。
添加新约束
此选项将所选类型的组件添加到游戏对象中,并将新创建的约束组件添加到手动约束列表中。
转换约束
约束可用于以某种方式限制操作。 例如,某些应用程序可能需要旋转,但同时要求对象保持垂直。 在这种情况下,可以向对象添加 RotationAxisConstraint
,并用于将旋转限制为 y 轴旋转。 MRTK 提供了许多约束,所有这些约束如下所述。
也可以定义新约束,并使用它们创建某些应用程序可能需要的唯一操作行为。 为此,可以创建一个继承自 TransformConstraint
的脚本,并实现抽象的 ConstraintType
属性和抽象的 ApplyConstraint
方法。 向对象添加新约束后,它应按定义的方式约束操作。 在手动模式下,这个新的约束还应该显示在约束管理器的“自动选择”或“添加条目”下拉列表中。
MRTK 提供的所有约束共享以下属性:
手类型
指定约束是用于单手操作、双手操作还是同时用于这两种操作。 由于此属性是一个标志,因此可以同时选择这两个选项。
- 单手:如果选择,约束将在单手操作期间使用。
- 双手操作:如果选择,约束将在双手操作期间使用。
邻近类型
指定约束是用于近操作、远操作还是同时用于这两种操作。 由于此属性是一个标志,因此可以同时选择这两个选项。
- 近:如果选择,约束将在近操作期间使用。
- 远:如果选择,约束将在远操作期间使用。
FaceUserConstraint
当此约束附加到对象时,旋转将受到限制,以便对象始终面向用户。 这适用于盖板或面板。 FaceUserConstraint
的属性如下:
人脸离开
如果为 true,则对象与用户远离。
FixedDistanceConstraint
此约束固定了操作开始时被操作对象与另一个对象转换之间的距离。 这适用于诸如固定被操作对象与头部转换之间的距离等行为。 FixedDistanceConstraint
的属性如下:
约束转换
这是被操作对象将具有固定距离的另一个转换。 默认为照相机转换。
FixedRotationToUserConstraint
此约束在被操作时固定了用户和被操作对象之间的相对旋转。 这适用于盖板或面板,因为它可确保被操作对象始终向用户显示与操作开始时相同的人脸。 FixedRotationToUserConstraint
没有任何唯一属性。
FixedRotationToWorldConstraint
此约束固定了被操作时被操作对象的全局旋转。 当不应通过操作来旋转时,这非常有用。 FixedRotationToWorldConstraint
没有任何唯一的属性:
MaintainApparentSizeConstraint
当此约束被附加到对象时,无论对象与用户有多远,它都将保持与用户相同的表面大小(即它将占据用户视野的相同比例)。 这可用于确保在操作时盖板或面板仍然可读。 MaintainApparentSizeConstraint
没有任何唯一的属性:
MoveAxisConstraint
此约束可用于固定被操作对象沿哪个轴移动。 这可用于在平面表面或沿直线操作对象。 MoveAxisConstraint
的属性如下:
移动约束
指定要阻止在哪个轴上移动。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。
- X 轴:如果选择,则沿 x 轴的移动受到限制。
- Y 轴:如果选择,则沿 y 轴的移动受到限制。
- Z 轴:如果选择,则沿 z 轴的移动受到限制。
使用局部空间进行约束
如果为 true,将约束被操作对象的局部转换轴。 默认值为 False。
RotationAxisConstraint
此约束可用于固定被操作对象可沿哪个轴旋转。 这可用于使被操作对象保持垂直,但仍允许围绕 y 轴旋转,例如。 RotationAxisConstraint
的属性如下:
旋转约束
指定要阻止围绕其旋转的轴。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。
- Y 轴:如果选择,则会约束围绕 y 轴的旋转。
- Z 轴:如果选择,则会约束围绕 Z 轴的旋转。
- X 轴:如果选择,则会约束围绕 X 轴的旋转。
使用局部空间进行约束
如果为 true,将约束被操作对象的局部转换轴。 默认值为 False。
MinMaxScaleConstraint
此约束允许为被操作对象的规模设置最小值和最大值。 这有助于防止用户将对象缩放得太小或太大。 MinMaxScaleConstraint
的属性如下:
最小比例
操作期间的最小缩放值。
最大比例
操作期间的最大缩放值。
相对于初始状态
如果为 true,上述值将被解释为相对于对象的初始缩放值。 否则,它们将被解释为绝对缩放值。