__变换组件__用于存储游戏对象的位置、旋转、缩放和父子化状态,因此非常重要。游戏对象始终附加一个变换组件,无法删除变换组件或创建没有变换组件的游戏对象。
在 3D 空间中可在 X、Y 和 Z 轴上操作变换组件,但在 2D 空间中只能在 X 和 Y 轴上操作。在 Unity 中,这些轴分别由红色、绿色和蓝色表示。
可以在 Scene 视图中编辑变换组件,也可以在 Inspector 中更改其属性。在场景中,可以使用移动、旋转和缩放工具修改变换组件。这些工具位于 Unity Editor 的左上角。
这些工具可用于场景中的任何对象。单击对象时,对象中将出现工具辅助图标。辅助图标的外观取决于选择的工具。
When you click and drag on one of the three gizmo axes, you will notice that its color changes to yellow. As you drag the mouse, you will see the object translate, rotate, or scale along the selected axis. When you release the mouse button, the axis remains selected. If you subsequently drag with the middle mouse button, the axis last selected will be used regardless of the mouse position.
在移动模式中还有一个附加选项可以锁定面向特定平面的移动(即允许在两个轴上拖动的同时保持第三个轴不变)。围绕移动辅助图标中心的三个小彩色方块可激活每个平面的锁定功能;这些颜色对应于单击方块时将锁定的轴(例如,蓝色锁定 Z 轴)。
父子化是使用 Unity 时需要理解的最重要概念之一。当一个游戏对象是另一个游戏对象的__父__项时,__子__游戏对象完全跟随其父项移动、旋转和缩放。可将父子化看作是手臂与身体之间的关系;每当身体移动时,手臂也随之移动。子对象也可以有自己的子项,以此类推。所以,手可以视为手臂的“子项”,然后每只手都有几根手指,等等。任何一个对象都可以有多个子项,但只有一个父项。这些多级父子关系形成了变换组件的_层级视图。层级视图最顶层的对象(即层级视图中唯一没有父项的对象)称为__根_。
将 __Hierarchy 视图__中的任何游戏对象拖到另一个游戏对象上即可创建父项。这样就会在这两个游戏对象之间建立父子关系。
请注意,Inspector 中任何子游戏对象的 Transform 值都是相对于父项 Transform 值显示的结果。这些值称为__局部坐标__。回到刚才身体和手臂的类比,身体的位置可能会随着人的行走而移动,但手臂相对于身体的位置不变。在进行场景构建时,通常使用子对象的局部坐标就足够了,但在游戏中通常需要找到这些对象在世界空间或__全局坐标__中的确切位置。变换组件的脚本 API 具有局部和全局位置、旋转和缩放的单独属性,还允许在局部和全局坐标之间转换任何点。
非一致缩放是指变换组件中的 Scale 具有不同的 x、y 和 z 值;例如 (2, 4, 2)。相反,一致缩放则具有相同 x、y 和 z 值;例如 (3, 3, 3)。在一些特殊情况下,非一致缩放可能很有用,但这种缩放方式会导致一致缩放所没有的一些奇怪现象:
变换组件的缩放比例决定了网格在建模应用程序中的大小与该网格在 Unity 中的大小之间的差异。Unity 中的网格大小(因此也就是变换组件的缩放比例)_非常_重要,尤其是在物理模拟过程中。默认情况下,物理引擎假定世界空间中的一个单位对应于一米。如果一个对象非常大,可能会出现“慢动作”问题;模拟实际上自生效以来是正确的,但您会看到非常大的对象滞后很远的距离。
有三个因素会影响对象的缩放比例:
理想情况下,不应在变换组件中调整对象的 Scale 设置。最好的选择是以真实比例创建模型,这样就不必更改变换组件的比例。次好的选择是在具体网格的 Import Settings 中调整导入网格时的比例。有些优化是基于导入大小进行的,因此实例化调整了比例值的对象可能会降低性能。有关更多信息,请参阅刚体 (Rigidbody) 组件参考页面上关于优化缩放比例的部分。