上一章的运行结果展示

那么接下来就然我来了解了解什么是Unity的Transform和Unity的坐标系,并且在上一章的 基础上进行制作一个会旋转 + 上下移动的物体
一、什么是 Transform?
每个 GameObject(对象) 必定有且仅有一个 Transform 组件,它记录了物体在世界中的三个核心信息:
Transform:
Position 位置(在哪里)
Rotation 旋转(朝哪里)
Scale 缩放(多大)

Transform 是 Unity 中最基础的组件,不能被删除。
二、Unity 的坐标系
Unity 使用左手坐标系,记住这三个轴的方向:
| 轴 | 方向 | 对应 Vector3 |
| X 轴 | 正右/负左 | Vector3.right = (1, 0, 0) Vector3.right = (-1, 0, 0) |
| Y 轴 | 正上/负下 | Vector3.up = (0, 1, 0) Vector3.up = (0, -1, 0) |
| Z 轴 | 正前/负后 | Vector3.forward = (0, 0, 1) Vector3.forward = (0, 0, -1) |
|---|

三、两种坐标系:世界坐标 vs 本地坐标
这是 Unity 里最容易搞混的概念:
世界坐标系(World Space):
以场景原点 (0,0,0) 为基准,固定不变。
cs
transform.position // 世界坐标位置
transform.eulerAngles // 世界旋转角度
transform.lossyScale // 世界缩放(只读)
本地坐标系(Local Space):
以父物体为基准。没有父物体时和世界坐标一致。
cs
transform.localPosition // 相对父物体的位置
transform.localEulerAngles// 相对父物体的旋转
transform.localScale // 相对父物体的缩放
如何区分这两个坐标系呢,接下来请看我们在场景的世界坐标原点创建一个立方体

这个物体现在的位置就是世界坐标的原点
接下来我在创建一个立方体和一个球体来观看他们跟原点这个物体的位置区别


在这里可以看到新建的立方体是X轴方向-2,而球体是X轴方向3,这个球体反而更贴近世界坐标的原点(0,0,0)这是因为我们的球体采用的是本地坐标,也就是他的父对象最右边的那个立方体 的坐标。
四、Translate 移动详解
cs
transform.position // 获取/设置世界坐标
transform.localPosition // 获取/设置本地坐标
transform.Translate(vec) // 相对移动
cs
transform.Translate(Vector3 translation, Space relativeTo);
第二个参数 Space 决定以哪个坐标系为基准移动:
cs
// 相对【自身】坐标系移动(默认)
// 物体转向后,forward 方向也跟着变
transform.Translate(Vector3.forward * speed * Time.deltaTime);
// 等同于:
transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.Self);
// 相对【世界】坐标系移动
// 无论物体朝哪,都朝世界 Z 轴正方向移动
transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World);
直观对比:
Space.Self → 像人走路,身体转了朝哪走哪
Space.World → 像推箱子,无论朝向都往固定方向走
五、Rotate 旋转详解
cs
transform.rotation // 四元数旋转(世界)
transform.localRotation // 四元数旋转(本地)
transform.eulerAngles // 欧拉角(世界)
transform.localEulerAngles // 欧拉角(本地)
transform.Rotate(vec) // 相对旋转
transform.LookAt(target) // 朝向某个目标
cs
transform.Rotate(Vector3 axis, float angle); // 指定轴 + 角度
transform.Rotate(Vector3 eulerAngles); // 传入欧拉角
三种常用旋转写法:
cs
// 写法一:绕 Y 轴每秒转 90 度
transform.Rotate(Vector3.up * 90f * Time.deltaTime);
// 写法二:分别指定轴和角度
transform.Rotate(Vector3.up, 90f * Time.deltaTime);
// 写法三:直接赋值旋转到某个角度
transform.eulerAngles = new Vector3(0, 45, 0); // 直接旋转到 Y=45°
注意:旋转用 eulerAngles(欧拉角),Unity 内部实际用四元数 Quaternion 存储,避免万向锁问题。
六、Scale 缩放详解
cs
transform.localScale // 本地缩放
transform.lossyScale // 世界缩放(只读)
cs
// 直接设置缩放
transform.localScale = new Vector3(2, 2, 2); // 放大2倍
// 动态变化缩放
transform.localScale += Vector3.one * Time.deltaTime; // 每秒均匀放大1
注意:transform.lossyScale 是世界缩放(只读),实际操作缩放用 localScale。
七、脚本实现
那么我们创建并打开脚本,经过上一章和这张的知识我们来书写这份脚本
首先设置好我们物体的速度,旋转角度
cs
public float moveSpeed = 3f;
public float rotateSpeed =90f;
在编写我的向某一个轴移动的方法(这里我默认使用Z轴)
cs
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
最后在编写我们的旋转逻辑
cs
transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime);
最后在将我们的脚本保存,并挂载在我场景中创建的物体对象上那么我们就实现了让物体在运行后朝某个方向移动的功能啦。

八、总结
GameObject
Transform
position / localPosition ← 在哪里
rotation / eulerAngles ← 朝哪里
localScale ← 多大
坐标系
世界坐标系 以场景原点为基准(固定)
本地坐标系 以父物体为基准(随父变化) Translate 移动
Space.Self(默认) 沿自身朝向移动
Space.World 沿世界轴移动
接下来我将连续更新90天的Untiy教程从基础到一个网络部分,有兴趣的朋友们可以收藏关注,谢谢!