翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷,而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。
约束组件 🔗
约束组件可以将一个 GameObject 的位置、旋转或缩放与另一个 GameObject 链接起来。被约束的 GameObject 会像它链接的 GameObject 一样移动、旋转或缩放。
Unity 支持以下类型的约束组件:
- Aim:将被约束的 GameObject 旋转对准链接的 GameObject。
- Look At:将被约束的 GameObject 旋转面对链接的 GameObject(简化的 Aim 约束)。
- Parent:使被约束的 GameObject 随着链接的 GameObject 一起移动和旋转。
- Position:使被约束的 GameObject 的移动方式与链接的 GameObject 相同。
- Rotation:使被约束的 GameObject 的旋转方式与链接的 GameObject 相同。
- Scale:使被约束的 GameObject 的缩放方式与链接的 GameObject 相同。
链接到 GameObject 🔗
在约束组件的Sources列表中指定要链接的 GameObject。
例如,要使准星跟随一个 2D 射击游戏中的玩家飞船,可以将一个Position Constraint组件添加到准星上。然后,在Position Constraint组件中将玩家飞船的 GameObject 添加到Sources列表中。当玩家移动飞船时,准星会跟随移动。
约束可以链接到多个源 GameObject。在这种情况下,约束会使用源 GameObject 的平均位置、旋转或缩放。例如,要将灯光对准一组 GameObject,可以在灯光的 GameObject 上添加一个Aim Constraint组件。然后,将要照明的 GameObject 添加到Sources列表中。Aim Constraint会将灯光定位到其源对象的平均位置。
Unity 按照源 GameObject 在Sources列表中出现的顺序评估它们。对于Position和Scale Constraint,顺序没有影响。但是,对于Parent、Rotation和Aim Constraint,顺序会有影响。为了得到您想要的结果,可以通过拖放方式重新排序Sources列表中的项。
您可以约束一系列的 GameObject。例如,您希望小鸭子按照排成一排跟随它们的母鸭。您可以将一个Position Constraint组件添加到 GameObject Duckling1 上。在Sources列表中,将其链接到MotherDuck。然后,您可以将一个Position Constraint添加到Duckling2,它链接到Duckling1。当MotherDuck GameObject 在场景中移动时,Duckling1会跟随MotherDuck路径,Duckling2会跟随Duckling1。
避免创建约束的循环,因为这会导致游戏过程中的不可预测的更新。
设置约束组件属性 🔗
使用 Inspector 窗口来更改约束中的常见属性。
使用Weight来改变约束的影响力。权重为 1 会导致约束以与源 GameObject 相同的速率更新被约束的 GameObject。权重为 0 会完全取消约束的影响。每个源 GameObject 也有一个独立的权重。
在Constraint Settings中,使用At Rest属性来指定Weight为 0 或相关的Freeze Axes属性未选中时使用的 X、Y 和 Z 值。
在Constraint Settings中使用Offset属性来指定在约束 GameObject 时使用的 X、Y 和 Z 值。
使用Freeze Axes设置来切换约束实际可修改的轴。
激活和锁定约束 🔗
与约束一起工作有两个方面:激活和锁定。
您可以激活约束以允许其评估被约束的 GameObject 的位置、旋转或缩放。Unity 不会评估处于非活动状态的约束。
您可以锁定约束以允许其移动、旋转或缩放 GameObject。锁定约束会控制 GameObject 的变换的相关部分。您不能手动移动、旋转或缩放具有锁定约束的 GameObject。您也无法编辑Constraint Settings。
要手动编辑 GameObject 的位置、旋转或缩放,请解锁其约束。如果在解锁时约束处于活动状态,那么在移动、旋转或缩放被约束的 GameObject 或其源 GameObject 时,约束会自动更新Constraint Settings。
当您向一个 GameObject 添加约束组件时,默认情况下约束是非活动且未锁定的。这使您可以在激活和锁定约束之前对被约束的 GameObject 和源 GameObject 的位置、旋转和缩放进行微调。
为了方便起见,Activate和Zero按钮会自动更新Constraint Settings:
- Activate:保存与源 GameObject 的当前偏移,然后激活和锁定被约束的 GameObject。
- Zero:将位置、旋转或缩放重置为与源 GameObject 匹配,然后激活和锁定被约束的 GameObject。
动画和组合约束 🔗
使用动画剪辑来修改被约束的 GameObject 链接到的源 GameObject。当动画修改源 GameObject 时,约束会修改被约束的 GameObject。
您还可以在约束组件中动画化属性。例如,使用 Parent 约束来将角色的剑从手持位置移动到背部。首先,在剑的 GameObject 上添加一个 Parent 约束。在Sources列表中,将约束链接到角色的手和角色的脊柱。为了对剑进行动画化,为每个源的权重添加关键帧。为了将剑从背部移动到手中,添加关键帧将手的权重从 0 变为 1,并为脊柱的权重从 1 变为 0。
您可以在同一个 GameObject 上添加多种约束组件。当更新 GameObject 时,Unity 会按照它们在 Inspector 窗口中的顺序从头到尾评估约束组件。一个 GameObject 只能包含一种相同类型的约束组件。例如,您不能添加多个 Position Constraint。
导入约束 🔗
当从 Autodesk® Maya® 和 MotionBuilder® 导入 FBX 文件到 Unity 编辑器时,您可以包含约束。在导入设置窗口的动画选项卡中,选中导入约束:
对于 FBX 文件中的每个约束,Unity 会自动添加相应的约束组件并将其链接到正确的 GameObject。
添加和编辑约束 🔗
添加约束组件:
- 选择要约束的 GameObject。
- 在Inspector窗口中,单击添加组件,搜索要添加的约束类型,然后单击进行添加。
- 要向新的约束中添加源 GameObject,请将该 GameObject 从 Hierarchy(或 Scene 视图)拖动到Sources列表中。
- 移动、旋转或缩放被约束的 GameObject 和其源 GameObject。
- 要激活约束,请单击激活或零,或勾选活动和锁定。
编辑约束组件:
- 在编辑器中选择被约束的 GameObject。
- 要调整静止状态或偏移字段,请使用 Inspector 窗口展开约束设置,取消选中锁定,然后编辑值。
- 要指定约束更新的轴,请展开约束设置,然后选中冻结轴中的属性。
- 要向约束中添加源 GameObject:
- 如果在 Sources 列表中没有空槽,请单击列表底部的 “+”。
- 从场景中将您想要用作约束源的 GameObject 拖动到Sources列表中。
- 要删除源 GameObject,请在Sources列表中选择它,然后单击列表底部的减号符(“-”)。
- 要重新排序Sources列表中的源 GameObject,请单击每个要移动的 GameObject 左侧的双栏图标,并将其上移或下移。 注意:在Sources列表中,顺序对于 Position、Rotation 和 Scale Constraints 没有影响。然而,顺序会影响 Parent 和 Aim Constraints 如何移动或旋转 GameObject。
- 勾选活动和锁定。
结论 🔗
搬砖愉快!