返回介绍

变换 (Transforms)

发布于 2021-06-19 18:03:19 字数 5098 浏览 1085 评论 0 收藏 0

变换 (Transforms) 是每个游戏对象 (GameObject) 的关键组件 (Component)。它们决定游戏对象 (GameObject) 的位置、旋转方式及缩放。创建一个没有变换组件 (Transform) 的游戏对象 (GameObject) 是不可能的。可以从场景视图 (Scene View)、检视器 (Inspector) 或通过脚本 (Scripting) 调整任意游戏对象 (GameObject) 的变换组件 (Transform)。

下面的文字来自变换组件参考页面。

变换

变换 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 处理非等比缩放的方式也有一定局限性:

  • 某些组件不完全支持非等比缩放。例如,对于有半径或类似属性的组件,例如球体碰撞组件 (Sphere Collider)、胶囊碰撞组件 (Capsule Collider), 灯光(Light), 音频源 (Audio Source) 等等,形状不会变成椭圆,而是仍然保持圆形/球形,不管如何进行非等比缩放。
  • 有一个非等比缩放的父级且相对该父级被旋转的子级对象可能会有一个非正交矩阵,这意味着它可能出现偏斜。一些确实支持简单非等比缩放的组件仍不支持非正交矩阵。例如,箱体碰撞组件 (Box Collider)不能偏斜,所以如果它的变换 (transform) 是非正交的,则箱体碰撞组件 (Box Collider) 不会准确匹配被渲染的网格的形状。。
  • 出于性能原因,有一个非等比缩放的父级的子级对象在旋转时不会自动更新其缩放/矩阵。这可能导致缩放一旦更新就会弹出,例如,如果对象与其父级分离。

缩放的重要性

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

  • 三维建模应用程序中网格的大小。
  • 对象的导入设置 (Import Settings) 中的网格缩放系数 (Mesh Scale Factor) 设置。
  • 变换组件 (Transform Component) 的缩放 (Scale)值。

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

提示

  • 父子化变换 (Transform) 时,请在添加子级之前将父级的位置设置为 <0,0,0>。这会为您以后节省很多精力。
  • 粒子系统 (Particle System) 不受变换 (Transform) 的 缩放 (Scale)的影响。为缩放某个粒子系统 (Particle System),您需要修改该系统的粒子发射器、动画器和渲染器的属性。
  • 如果您正将 刚体 (Rigidbody) 用于物理模拟,则您可以参考在类别 - 刚体 组件参考页面上的一些有关“缩放”(Scale) 属性的重要信息。
  • 您可以从偏好设置改变变换 (Transform) 轴(和其他 UI 元素)的颜色,( 菜单:Unity > 偏好设置 (Preferences) ,然后选择 颜色和按键 (Colors & keys) 面板)。.
  • 如果可能,最好避免在 Unity 中进行缩放。试着在三维建模应用程序中或在网格的 导入设置 (Import Settings 中完成对象的缩放。S

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文