陈巧倩

Unity中文版-Create Gameplay Constraints(自翻译)

· 256 words · 2 minutes to read
Categories: Unity
Tags: Document

翻译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列表中出现的顺序评估它们。对于PositionScale Constraint,顺序没有影响。但是,对于ParentRotationAim 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 的位置、旋转和缩放进行微调。

为了方便起见,ActivateZero按钮会自动更新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。

添加和编辑约束 🔗

添加约束组件:

  1. 选择要约束的 GameObject。
  2. Inspector窗口中,单击添加组件,搜索要添加的约束类型,然后单击进行添加。
  3. 要向新的约束中添加源 GameObject,请将该 GameObject 从 Hierarchy(或 Scene 视图)拖动到Sources列表中。
  4. 移动、旋转或缩放被约束的 GameObject 和其源 GameObject。
  5. 要激活约束,请单击激活,或勾选活动锁定

编辑约束组件:

  1. 在编辑器中选择被约束的 GameObject。
  2. 要调整静止状态偏移字段,请使用 Inspector 窗口展开约束设置,取消选中锁定,然后编辑值。
  3. 要指定约束更新的轴,请展开约束设置,然后选中冻结轴中的属性。
  4. 要向约束中添加源 GameObject:
    • 如果在 Sources 列表中没有空槽,请单击列表底部的 “+”。
    • 从场景中将您想要用作约束源的 GameObject 拖动到Sources列表中。
  5. 要删除源 GameObject,请在Sources列表中选择它,然后单击列表底部的减号符(“-”)。
  6. 要重新排序Sources列表中的源 GameObject,请单击每个要移动的 GameObject 左侧的双栏图标,并将其上移或下移。 注意:在Sources列表中,顺序对于 Position、Rotation 和 Scale Constraints 没有影响。然而,顺序会影响 Parent 和 Aim Constraints 如何移动或旋转 GameObject。
  7. 勾选活动锁定

结论 🔗

搬砖愉快!