约束管理器 — MRTK2

使用约束管理器,可以将一组约束组件应用于转换。 可以考虑使用附加到游戏对象的 TransformConstraint 类型的组件。 默认情况下,约束管理器将自动收集附加到游戏对象的所有约束组件,并将其应用于已处理的转换。 但是,用户可以选择手动配置应用的约束列表,只允许应用附加约束的一个子集。

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

检查器属性和字段

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

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

自动约束选择

Auto Selection

约束管理器的默认模式,即自动约束选择,将提供所有附加约束组件的列表,以及转到按钮添加约束按钮

向游戏对象添加约束

此按钮允许直接从约束管理器检查器添加约束组件。 在这里应该可以看到项目中的所有约束类型。 有关详细信息,请参阅转换约束

转到组件

在此对象上找到的所有约束都将在此处列出,并带有“转到组件”按钮。 此按钮将导致检查器滚动到所选约束组件,以便对其进行配置。

手动约束选择

Manual Selection

如果将束管理器设置为手动模式,则仅处理约束列表中链接的约束并将其应用于转换。 显示的列表将仅显示用户选择的约束,以及转到按钮或用于删除或添加条目的选项。 首次启用手动模式时,约束管理器将使用所有可用组件填充列表,作为选择附加约束组件的起点。

删除条目

这将从手动选择的列表中删除条目。 请注意,此选项不会从游戏对象中删除约束组件。 始终需要手动删除约束组件,以确保不会意外破坏任何其他引用该组件的组件。

添加条目

“添加条目”将打开一个下拉列表,显示还不在手动列表中的所有可用约束组件。 通过单击任何条目,该组件将被添加到手动约束选择。

添加新约束

此选项将所选类型的组件添加到游戏对象中,并将新创建的约束组件添加到手动约束列表中。

转换约束

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

也可以定义新约束,并使用它们创建某些应用程序可能需要的唯一操作行为。 为此,可以创建一个继承自 TransformConstraint 的脚本,并实现抽象的 ConstraintType 属性和抽象的 ApplyConstraint 方法。 向对象添加新约束后,它应按定义的方式约束操作。 在手动模式下,这个新的约束还应该显示在约束管理器的“自动选择”或“添加条目”下拉列表中。

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

手类型

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

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

邻近类型

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

  • 近:如果选择,约束将在近操作期间使用
  • 远:如果选择,约束将在远操作期间使用

FaceUserConstraint

Constraint Face User

当此约束附加到对象时,旋转将受到限制,以便对象始终面向用户。 这适用于盖板或面板。 FaceUserConstraint 的属性如下:

人脸离开

如果为 true,则对象与用户远离。

FixedDistanceConstraint

Constraint Fixed distances

此约束固定了操作开始时被操作对象与另一个对象转换之间的距离。 这适用于诸如固定被操作对象与头部转换之间的距离等行为。 FixedDistanceConstraint 的属性如下:

约束转换

这是被操作对象将具有固定距离的另一个转换。 默认为照相机转换。

FixedRotationToUserConstraint

Fixed Rotation

此约束在被操作时固定了用户和被操作对象之间的相对旋转。 这适用于盖板或面板,因为它可确保被操作对象始终向用户显示与操作开始时相同的人脸。 FixedRotationToUserConstraint 没有任何唯一属性。

FixedRotationToWorldConstraint

Fixed rotation to the world

此约束固定了被操作时被操作对象的全局旋转。 当不应通过操作来旋转时,这非常有用。 FixedRotationToWorldConstraint 没有任何唯一的属性:

MaintainApparentSizeConstraint

Maintain Apparent size

当此约束被附加到对象时,无论对象与用户有多远,它都将保持与用户相同的表面大小(即它将占据用户视野的相同比例)。 这可用于确保在操作时盖板或面板仍然可读。 MaintainApparentSizeConstraint 没有任何唯一的属性:

MoveAxisConstraint

Constraint Move Axis

此约束可用于固定被操作对象沿哪个轴移动。 这可用于在平面表面或沿直线操作对象。 MoveAxisConstraint 的属性如下:

移动约束

指定要阻止在哪个轴上移动。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。

  • X 轴:如果选择,则沿 x 轴的移动受到限制。
  • Y 轴:如果选择,则沿 y 轴的移动受到限制。
  • Z 轴:如果选择,则沿 z 轴的移动受到限制。

使用局部空间进行约束

如果为 true,将约束被操作对象的局部转换轴。 默认值为 False。

RotationAxisConstraint

Constraint Rotation Axis

此约束可用于固定被操作对象可沿哪个轴旋转。 这可用于使被操作对象保持垂直,但仍允许围绕 y 轴旋转,例如。 RotationAxisConstraint 的属性如下:

旋转约束

指定要阻止围绕其旋转的轴。 默认情况下,这些轴是全局轴而不是局部轴,但可以在下方进行更改。 由于此属性是一个标志,因此可以选择任意数目的选项。

  • Y 轴:如果选择,则会约束围绕 y 轴的旋转。
  • Z 轴:如果选择,则会约束围绕 Z 轴的旋转。
  • X 轴:如果选择,则会约束围绕 X 轴的旋转。

使用局部空间进行约束

如果为 true,将约束被操作对象的局部转换轴。 默认值为 False。

MinMaxScaleConstraint

Min Max Constatint

此约束允许为被操作对象的规模设置最小值和最大值。 这有助于防止用户将对象缩放得太小或太大。 MinMaxScaleConstraint 的属性如下:

最小比例

操作期间的最小缩放值。

最大比例

操作期间的最大缩放值。

相对于初始状态

如果为 true,上述值将被解释为相对于对象的初始缩放值。 否则,它们将被解释为绝对缩放值。