Version: 2022.1
游戏对象
Introduction to components

变换组件

__变换组件__用于存储游戏对象的位置、旋转、缩放和父子化状态,因此非常重要。游戏对象始终附加一个变换组件,无法删除变换组件或创建没有变换组件的游戏对象。

Transform 组件

Transform 组件确定每个对象在场景中的 PositionRotationScale 属性的值。每个游戏对象都有一个变换组件。

属性

属性: 功能:
Position 变换组件在 X、Y 和 Z 坐标的位置。
Rotation 变换组件围绕 X、Y 和 Z 轴的旋转(以度为测量单位)。
Scale Scale of the Transform along X, Y, and Z axes. Value “1” is the original size (size at which the object was imported).
Select the link icon next to the values to toggle proportional scaling. Proportional scaling adjusts the scale values proportionately to each other. For example, if your GameObject’s x, y and z axis values are (1, 2, 4) and you double the x axis value to 2, the y and z axis values change to 4 and 8 respectively. When enabled, proportional scaling also applies to changes you make using the Scale tool in the Scene view.
If any scale value is zero, it is grayed out and does not automatically adjust when proportional scaling is enabled.
Note: You can assign a keyboard shortcut to enable or disable proportional scaling. See Shortcuts Manager.

变换组件的位置、旋转和缩放值是相对于变换组件的父项测量的。如果变换组件没有父项,则按照世界空间来测量属性。

编辑变换组件

在 3D 空间中可在 X、Y 和 Z 轴上操作变换组件,但在 2D 空间中只能在 X 和 Y 轴上操作。在 Unity 中,这些轴分别由红色、绿色和蓝色表示。

一个用颜色标示不同轴的变换组件
一个用颜色标示不同轴的变换组件

可以在 Scene 视图中编辑变换组件,也可以在 Inspector 中更改其属性。在场景中,可以使用移动、旋转和缩放工具修改变换组件。这些工具位于 Unity Editor 的左上角。

查看、移动、旋转和缩放工具
查看、移动、旋转和缩放工具

这些工具可用于场景中的任何对象。单击对象时,对象中将出现工具辅助图标。辅助图标的外观取决于选择的工具。

变换组件辅助图标
变换组件辅助图标

单击并拖动三个辅助图标轴的其中一个轴时,该轴的颜色变为黄色。拖动鼠标时,对象将沿选定轴移动、旋转或缩放。松开鼠标按键时,该轴保持选中状态。

一个已选中(黄色)X 轴的变换组件
一个已选中(黄色)X 轴的变换组件

在移动模式中还有一个附加选项可以锁定面向特定平面的移动(即允许在两个轴上拖动的同时保持第三个轴不变)。围绕移动辅助图标中心的三个小彩色方块可激活每个平面的锁定功能;这些颜色对应于单击方块时将锁定的轴(例如,蓝色锁定 Z 轴)。

父子化

父子化是使用 Unity 时需要理解的最重要概念之一。当一个游戏对象是另一个游戏对象的__父__项时,__子__游戏对象完全跟随其父项移动、旋转和缩放。可将父子化看作是手臂与身体之间的关系;每当身体移动时,手臂也随之移动。子对象也可以有自己的子项,以此类推。所以,手可以视为手臂的“子项”,然后每只手都有几根手指,等等。任何一个对象都可以有多个子项,但只有一个父项。这些多级父子关系形成了变换组件的_层级视图。层级视图最顶层的对象(即层级视图中唯一没有父项的对象)称为__根_。

将 __Hierarchy 视图__中的任何游戏对象拖到另一个游戏对象上即可创建父项。这样就会在这两个游戏对象之间建立父子关系。

父子层级视图的示例。名称左侧有折叠箭头的游戏对象表示父项。
父子层级视图的示例。名称左侧有折叠箭头的游戏对象表示父项。

请注意,Inspector 中任何子游戏对象的 Transform 值都是相对于父项 Transform 值显示的结果。这些值称为__局部坐标__。回到刚才身体和手臂的类比,身体的位置可能会随着人的行走而移动,但手臂相对于身体的位置不变。在进行场景构建时,通常使用子对象的局部坐标就足够了,但在游戏中通常需要找到这些对象在世界空间或__全局坐标__中的确切位置。变换组件的脚本 API 具有局部和全局位置、旋转和缩放的单独属性,还允许在局部和全局坐标之间转换任何点。

非一致缩放的限制

非一致缩放是指变换组件中的 Scale 具有不同的 x、y 和 z 值;例如 (2, 4, 2)。相反,一致缩放则具有相同 x、y 和 z 值;例如 (3, 3, 3)。在一些特殊情况下,非一致缩放可能很有用,但这种缩放方式会导致一致缩放所没有的一些奇怪现象:

  • 某些组件不完全支持非一致缩放。例如,有些组件具有由 radius 属性定义的圆形或球形元素,这些组件包括__球形碰撞体 (Sphere Collider)胶囊碰撞体 (Capsule Collider)光源 (Light)__ 和__音频源 (Audio Source)__。在这种情况下,圆形形状不会像预期的那样在非一致缩放下变成椭圆形,而是仍然保持圆形。
  • 当子对象具有非一致缩放的父项并且相对于该父项旋转时,子对象可能看起来是倾斜或“截断”的。有些组件支持简单的非一致缩放,但在有这种倾斜的情况下无法正常工作。例如,倾斜的__盒型碰撞体 (Box Collider)__ 无法准确匹配渲染网格的形状。
  • 出于性能原因,如果父项非一致缩放,子对象在旋转时不会自动更新其缩放比例。因此,当缩放比例最终_更新_时,子对象的形状可能会突然发生变化,例如在子对象与父项分离的情况下。

缩放比例的重要性

The scale of the Transform determines the difference between the size of a mesh in your modeling application and the size of that mesh in Unity. The mesh’s size in Unity (and therefore the Transform’s scale) is very important, especially during physics simulation. By default, the physics engine assumes that one unit in world space corresponds to one meter. If an object is very large, it can appear to fall in “slow motion”; the simulation is actually correct since effectively, you are watching a very large object falling a great distance.

有三个因素会影响对象的缩放比例:

  • 网格在 3D 建模应用程序中的大小。
  • 对象的 Import Settings 中的 Mesh Scale Factor 设置。
  • 变换组件的 Scale 值。

理想情况下,不应在变换组件中调整对象的 Scale 设置。最好的选择是以真实比例创建模型,这样就不必更改变换组件的比例。次好的选择是在具体网格的 Import Settings 中调整导入网格时的比例。有些优化是基于导入大小进行的,因此实例化调整了比例值的对象可能会降低性能。有关更多信息,请参阅刚体 (Rigidbody) 组件参考页面上关于优化缩放比例的部分。

关于使用变换组件的提示

  • 在设置变换组件的父子关系时,一种有用的做法是在添加子项之前将父项的位置设置为 <0,0,0>。这意味着子项的局部坐标将与全局坐标相同,因此更容易确保子项处于正确位置。
  • 如果使用__刚体__进行物理模拟,请务必阅读刚体组件参考页面上的 Scale 属性。
  • 可通过偏好设置(菜单:__Unity > Preferences__,然后选择 Colors & keys 面板)更改变换轴(和其他 UI 元素)的颜色。
  • 更改缩放比例会影响子项转换组件的位置。例如,将父项的缩放比例调整到 (0,0,0) 将使所有子项相对于父项位于 (0,0,0) 位置。
游戏对象
Introduction to components