Quaternion 是 Unity 里专门用来表示物体旋转的数学结构,所有 GameObject 的旋转本质都是 Quaternion,你在 Inspector 面板看到的 Rotation (x,y,z) 只是方便查看的欧拉角,底层全是 Quaternion。
它的核心优势:完全避免万向节死锁,旋转计算流畅、稳定,是 Unity 唯一推荐的旋转方式。
一、最核心知识点(必记)
不要手动修改 Quaternion 的 x/y/z/w 值!(都是计算用的,看不懂、易改错)
全部用官方提供的 API 实现旋转,安全又简单。
面板上的欧拉角 = transform.eulerAngles,代码里优先用 Quaternion 方法。
二、静态常量(直接用,最常用)
这些是 Unity 预设好的旋转值,一行代码就能用:
cpp
Quaternion.identity; // 无旋转(默认状态,和父物体方向一致)
Quaternion.Euler(0,90,0); // 按欧拉角旋转(最常用!)
三、最常用 API(90% 场景都用这几个)
- 欧拉角 → 四元数(日常开发 No.1)
把你熟悉的 (x,y,z) 角度,直接转成 Quaternion:
cpp
// 物体 Y 轴转 90 度
transform.rotation = Quaternion.Euler(0, 90, 0);
// 每秒绕 Y 轴旋转 30 度
transform.rotation = Quaternion.Euler(0, 30 * Time.time, 0);
- 看向目标(怪物 / 炮台看向玩家)
让物体自动转向指定目标:
cpp
public Transform target;
void Update()
{
// 物体正面始终看向目标
transform.LookAt(target);
// 等价写法
transform.rotation = Quaternion.LookRotation(target.position - transform.position);
}
- 平滑旋转 / 缓动旋转(非常常用)
像 "转头" 一样慢慢转向目标,不生硬:
cpp
public Transform target;
public float turnSpeed = 2f;
void Update()
{
// 计算目标旋转
Quaternion targetRot = Quaternion.LookRotation(target.position - transform.position);
// 平滑旋转过去
transform.rotation = Quaternion.Lerp(transform.rotation, targetRot, turnSpeed * Time.deltaTime);
}
- 沿某轴旋转(右转、抬头、低头)
cpp
// 绕自身 Y 轴(上方向)旋转 30 度
transform.rotation = Quaternion.AngleAxis(30, transform.up);
四、常用实用代码(直接复制)
- 让物体永远向前旋转
cpp
void Update()
{
// 自身 Y 轴每秒转 90 度
transform.Rotate(0, 90 * Time.deltaTime, 0);
}
- 随机旋转方向
cpp
// 生成一个完全随机的旋转
transform.rotation = Quaternion.Euler(Random.Range(0,360), Random.Range(0,360), 0);
- 获取当前旋转的欧拉角
cpp
// 获取物体当前的 X/Y/Z 角度(面板上看到的值)
Vector3 angles = transform.eulerAngles;
float yRot = angles.y;
总结
Quaternion = Unity 标准旋转格式,替代欧拉角,无死锁。
90% 需求只用这两个:
Quaternion.Euler(角度) → 直接设置旋转
Quaternion.Lerp() → 平滑转向
永远不要手动修改 x/y/z/w,用官方 API 最安全。
看向目标用 LookAt,沿轴旋转用 AngleAxis。