初面网初面网

Transform 组件

常用API

属性方法详解
position位置
rotation旋转
scale缩放

如何获取全局位置、旋转、缩放

// 获取全局位置
Vector3 globalPos = transform.position;
// 获取全局旋转
Quaternion globalRot = transform.rotation;
// 获取欧拉角
Vector3 eulerAngles = transform.eulerAngles;
// 获取全局缩放
Vector3 globalScale = transform.scale;

如何获取本地位置、旋转、缩放

// 获取本地位置
Vector3 localPos = transform.localPosition;
// 获取本地旋转
Quaternion localRot = transform.localRotation;
// 获取本地欧拉角
Vector3 localEulerAngles = transform.localEulerAngles;
// 获取本地缩放
Vector3 localScale = transform.localScale;

全局和本地有什么区别?

  • 全局坐标:从世界坐标系开始,经历所有父级的变换,最终到达当前物体的坐标。
  • 本地坐标:从当前物体的坐标系开始,不经历父级的变换,直接到达当前物体的坐标。

如何正确进行旋转?

// 正确的旋转方式
transform.rotation = Quaternion.Euler(0, 0, 0);

正方向与其他方向

  • 全局正方向Vector3.forward(0, 0, 1)

  • 本地正方向transform.forward(取决于物体自身旋转)

  • 全局向上方向Vector3.up(0, 1, 0)

  • 本地向上方向transform.up(取决于物体自身旋转)

  • 全局向右方向Vector3.right(1, 0, 0)

  • 本地向右方向transform.right(取决于物体自身旋转)

获取同级物体、父级物体、子级物体

  • 获取同级物体transform.GetSiblingIndex()(返回物体在父级中的索引)
  • 获取父级物体transform.parent(返回物体的父级 Transform 组件)
  • 获取子级物体transform.GetChild(index)(返回指定索引的子级 Transform 组件)
  • 获取子级物体数量transform.childCount(返回子级物体的数量)

为什么transform.position的量不能直接修改?

  • 值类型副本机制:在Unity中,transform.position是一个属性,它返回的是Vector3结构体(值类型)的副本。当你访问transform.position时,Unity会创建并返回一个新的Vector3实例。
  • 修改副本无效:如果你直接修改返回值的分量(如transform.position.x = 10),你只是修改了一个临时副本,而不是transform组件内部的实际数据,因此修改不会生效。

正确的修改方式

方法1:创建副本修改后完整赋值

// 正确的修改位置的方式
Vector3 newPos = transform.position;
newPos.x = 10f; // 修改副本的分量
transform.position = newPos; // 将修改后的副本完整赋值回去

方法2:同时修改位置和旋转时使用 SetPositionAndRotation

// 同时修改位置和旋转的方式(性能更优)
transform.SetPositionAndRotation(newPos, newRot);

更新于 2026/2/26