Version: Unity 6.0 (6000.0)
语言 : 中文
GameObject
Rotation and orientation

变换组件

Switch to Scripting

变换组件 (Transform) 存储游戏对象的位置旋转缩放和父子关系状态。游戏对象始终附加一个变换组件:您无法删除变换组件或创建没有变换组件的游戏对象。

变换组件

变换组件确定每个对象在场景中的位置旋转缩放属性的值。每个游戏对象都有一个变换组件。

变换组件
变换组件

提示:可更改变换轴的颜色(和其他 UI 元素)(菜单:Unity > 偏好 (Preferences),并接着选择颜色和按键 (Colors & keys) 面板)。

属性

属性: 功能:
Position 变换组件在 x、y 和 z 坐标的位置。
Rotation 变换组件围绕 x、y 和 z 轴的旋转(以度为测量单位)。
Scale 变换组件沿 x、y 和 z 轴的缩放比例。值“1”是原始大小(导入游戏对象时的大小)。
Enable Constrained Proportions 强制缩放以保持其当前比例,因此改变一个轴就会改变其他两个轴。默认禁用。

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

编辑变换组件

在 2D 空间中,只能在 x 轴或 y 轴上操作变换组件。在 3D 空间中,可以在 x 轴、y 轴和 z 轴上操作变换。在 Unity 中,这些轴分别由红色、绿色和蓝色表示。

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

可通过三种主要方式编辑变换组件的属性:

场景视图

在场景视图中,可以使用移动、旋转和缩放工具来修改变换组件。这些工具位于 Unity Editor 的左上角。

手形、移动、旋转和缩放工具
手形、移动、旋转和缩放工具

可以在场景中的任何游戏对象上使用变换工具。选择游戏对象时,工具 Gizmo 将显示在游戏对象中。辅助图标 (Gizmo) 的外观取决于选择的工具。

变换辅助图标,括号内为键盘快捷键。
变换辅助图标,括号内为键盘快捷键。

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

在移动游戏对象时,您可以将移动锁定到特定平面(即,更改两个轴并保持第三个轴不变)。要为每个平面激活锁定,请选择移动辅助图标 (Move Gizmo) 中心周围的三个小彩色方块。颜色对应于选择方块时锁定的轴(例如,选择蓝色方块以锁定 Z 轴)。

检视面板窗口

在检视面板窗口中,可以使用变换组件编辑所选游戏对象的变换属性。有两种方法可以在组件中编辑变换属性值:

  • 在属性值字段中手动输入值。这对于非常具体的调整很有用。
  • 单击某个值字段,然后向上或向下拖动以增加或减少该值。这对于不太具体的调整很有用。

C# 脚本

使用 Transform API,通过脚本编辑游戏对象的变换。

游戏对象分组

在 Unity 中,可以将游戏对象分组到父子层级视图中:

  • 父游戏对象拥有与之连接并具有其变换属性的其他游戏对象。
  • 子游戏对象连接到另一个游戏对象,并采用该游戏对象的变换属性。

在层级视图窗口中,子游戏对象直接显示在父游戏对象下方,并在列表中缩进。可以选择折叠图标来隐藏或显示父游戏对象的子游戏对象。

子游戏对象的移动、旋转和缩放与其父项完全相同。子游戏对象也可以有自己的子游戏对象。一个游戏对象可以有多个子游戏对象,但只能有一个父游戏对象。

这些游戏对象之间的多级父子关系形成了变换组件的层级视图。层级视图顶层的游戏对象(即层级视图中唯一没有父项的游戏对象)称为__根__游戏对象。

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

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

编辑父游戏对象和子游戏对象的变换

可以将游戏对象分组到父子层级视图中。

请注意,任何子游戏对象的变换值都是相对于父游戏对象变换值显示的结果。这些值称为__局部坐标。对于场景构建,使用子游戏对象的本地坐标通常就足够了。在游戏玩法中,这对于查找它们的__全局坐标__或它们在世界空间中的确切位置通常很有用。变换组件的脚本 API 具有局部和全局 PositionRotation__ 和 Scale 的单独属性,还允许在局部和全局坐标之间进行转换。

提示:在父项变换时,一种有用的做法是在添加子项变换之前将父项的位置设置为 <0,0,0>。这意味着子项的局部坐标将与全局坐标相同,因此更容易确保子项变换处于正确位置。

变换和缩放

变换组件的 Scale 决定了网格在建模应用程序中的大小与该网格在 Unity 中的大小之间的差异。Unity 中的网格大小(因此也就是变换组件的 __Scale__)非常重要,尤其是在物理模拟过程中。默认情况下,物理引擎假定世界空间中的一个单位对应于一米。如果一个游戏对象非常大,可能会出现“慢动作”问题;模拟是正确的,但您会看到非常大的游戏对象滞后很远的距离。

三个因素会影响游戏对象的 __Scale__:

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

请勿在变换组件中调整游戏对象的 Scale 设置。如果要以真实比例创建模型,就不必更改变换组件的 Scale。还可以调整网格导入的比例,因为某些优化是根据导入大小进行的。在单个网格的 Import settings 中执行此操作。对具有调整的 Scale 值的游戏对象进行实例化可能会降低性能。

注意:更改 Scale 会影响子项转换组件的位置。例如,将父变换组件缩放到 (0,0,0) 会使所有子变换组件相对于父变换组件定位于 (0,0,0)。

非一致缩放

非一致缩放是指变换组件中的缩放具有不同的 x、y 和 z 值;例如 (2, 4, 2)。相反,一致缩放则具有相同 x、y 和 z 值;例如 (3, 3, 3)。非一致缩放在少数特定情况下可能很有用,但其行为与一致缩放不同:

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

其他资源

变换组件

GameObject
Rotation and orientation