变换

变换 Component 决定场景中每个对象的位置 (Position)旋转 (Rotation)缩放 (Scale) 。每个对象都有一个变换 (Transform) 属性。


场景视图 (Scene View) 检视器 (Inspector)可以编辑变换组件 (Transform Component)

属性

属性:功能
位置 (Position)X、Y 和 Z 坐标中变换 (Transform) 的位置。
旋转 (Rotation)变换 (Transform) 围绕 X、Y 和 Z 轴的旋转,以度计。
缩放 (Scale)变换 (Transform) 沿 X、Y 和 Z 轴的缩放。“1” 是原始大小(对象被导入时的大小)。

变换 (Transform) 的所有属性都是参照它的父级进行测量的(请参阅以下内容了解更多详细信息)。如果变换 (Transform) 无父级,则参照世界坐标空间 (World Space) 测量属性。

使用变换

通常在 X、Y 和 Z 轴的三维空间中控制变换 (Transform)。在 Unity 中,分别用红色、绿色和蓝色代表这些轴。请记住:XYZ = RGB。


三个轴和变换 (Transform) 属性之间的颜色编码关系

可以在场景视图 (Scene View) 中或通过编辑检视器 (Inspector) 中的属性来直接控制变换 (Transform)。在场景中,您可以使用“移动”(Move)、“旋转”(Rotate) 和“缩放”(Scale) 工具来修改变换 (Transform)。上述工具位于 Unity 编辑器 (Editor) 左上角。


“视图”(View)、“平移”(Translate)、“旋转”(Rotate) 和“缩放”(Scale) 工具

这些工具可用于场景中的任何对象。单击对象时,您会看见场景中出现工具小图示。小图示的外观取决于选择哪种工具。



可以直接在场景视图 (Scene View) 中编辑三个小图示 (Gizmo)。

当您单击或拖动其中一个小图示时,您会注意到它变化颜色。拖动鼠标时,您会看见对象沿选定的轴平移、旋转和缩放。释放鼠标按钮后,轴仍然被选定。单击中间的鼠标按钮并拖动鼠标来沿选定的轴控制变换 (Transform)。


单击任何轴时就已选定该轴

围绕变换 (Transform) 小图示中心的是三个有色的方框。这些方框使您可以在单个平面内拖动变换 (Transform)(即,对象会在两个轴上移动,但在第三个轴上保持不动)。


在 XZ 平面内拖动

父子化

父子化 (Parenting) 是使用 Unity 时需要理解的最重要的概念之一。当某个游戏对象 (GameObject) 是另一个游戏对象 (GameObject) 的父级 (Parent) 时,子级 (Child) 游戏对象 (GameObject) 会像其父级 (Parent) 一样移动、旋转和缩放。正如您的手臂与躯干相连,转动躯干时,手臂因为与其相连也会移动。任何对象都可以有多个子级,但却只能有一个父级。

您可以通过将层级视图 (Hierarchy View) 的任何游戏对象 (GameObject) 拖到另一个游戏对象上来创建一个父级 (Parent)。此操作会在两个游戏对象 (GameObject) 之间创建一种父子关系。


父子层级视图 (hierarchy) 示例。名称左侧有折叠箭头的游戏对象 (GameObjects) 是父级。

上述示例中,我们认为躯干是手臂的父级而手臂是手的父级。您在 Unity 中制作的场景将包含这些变换层级 (Transform hierarchy)的集合。最上层的父级对象被称为根对象 (Root object)。当您移动、缩放或旋转某个父级对象时,其变换 (Transform) 中的所有变化都会被应用于其子级对象。

值得指出的是任何子级游戏对象 (Child GameObject) 的检视器 (Inspector) 中的变换 (Transform) 值都会相对于父级 (Parent) 的变换 (Transform) 值而显示。这些值又被称局部坐标 (Local Coordinate) 。您可以通过脚本处理访问全局坐标 (Global Coordinate) 和局部坐标 (local coordinate)。

您可以将多个单独的对象一起父子化来构建复合对象,例如,布娃娃的骨架结构。您还可以通过简单的层级实现有用的效果。例如,如果您有个夜间恐怖游戏,您就可以用手电筒创造有效气氛。要创建此对象,您要使手电筒变换 (Transform) 成为聚光灯变换 (Transform) 的父级。然后,手电筒变换 (Transform) 的任何修改都会影响聚光灯,创建一个逼真的手电筒效果。

非等比缩放的性能问题和局限性

非等比缩放是指当变换 (Transform) 中的 缩放 (Scale) 属性的 x、y 和 z 值不同时;例如 (2, 4, 2)。与此相反,等比缩放中的 x、y 和 z 值相同;例如 (3, 3, 3)。非等比缩放可能在少数选择个案中是有用的,但能避免使用它时就应避免。

非等比缩放对渲染性能有负面影响。为正确变换顶点法线,我们变换 CPU 上的网格并另外创建一份数据拷贝。通常我们可以保持网格在图形内存实例之间共享,但这样您就每个实例都需支付 CPU 和内存成本。

Unity 处理非等比缩放的方式也有一定局限性:

缩放的重要性

(Transform) 的缩放决定建模应用程序中网格和 Unity 中网格之间的大小差异。Unity 中的网格大小(因此变换 (Transform) 的缩放)常重要,特别是在物理模拟期间。有三个可以影响对象缩放的系数:

理想情况下,您不应该调整变换组件 (Transform Component) 中对象的 缩放 (Scale) 值。最佳选项是按实际比例创建您的模型,这样您就不必改变变换 (Transform) 的缩放值。第二最佳选项是调整在单个网格的导入设置 (Import Settings 中导入网格时的缩放值。根据导入大小会进行某些优化,而实例化有一个调整过的缩放值的对象会降低性能。有关更多信息,请参阅刚体组件参考页面上的优化缩放部分。

提示

Page last updated: 2013-07-01