Unity 中的 Quaternion(四元数)详解

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% 场景都用这几个)

  1. 欧拉角 → 四元数(日常开发 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);
  1. 看向目标(怪物 / 炮台看向玩家)
    让物体自动转向指定目标:
cpp 复制代码
public Transform target;

void Update()
{
    // 物体正面始终看向目标
    transform.LookAt(target);
    // 等价写法
    transform.rotation = Quaternion.LookRotation(target.position - transform.position);
}
  1. 平滑旋转 / 缓动旋转(非常常用)
    像 "转头" 一样慢慢转向目标,不生硬:
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);
}
  1. 沿某轴旋转(右转、抬头、低头)
cpp 复制代码
// 绕自身 Y 轴(上方向)旋转 30 度
transform.rotation = Quaternion.AngleAxis(30, transform.up);

四、常用实用代码(直接复制)

  1. 让物体永远向前旋转
cpp 复制代码
void Update()
{
    // 自身 Y 轴每秒转 90 度
    transform.Rotate(0, 90 * Time.deltaTime, 0);
}
  1. 随机旋转方向
cpp 复制代码
// 生成一个完全随机的旋转
transform.rotation = Quaternion.Euler(Random.Range(0,360), Random.Range(0,360), 0);
  1. 获取当前旋转的欧拉角
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。
相关推荐
WarPigs13 小时前
游戏签到系统
unity
小拉达不是臭老鼠16 小时前
Unity中的UI系统之UGUI
学习·ui·unity
万兴丶16 小时前
Coplay适用于 Unity 的“Al 代理”使用指南
unity·游戏引擎·ai编程
魔士于安19 小时前
Unity材质球大合集
unity·游戏引擎·材质
mxwin21 小时前
Unity Shader 冰面 Shader 制作原理与流程
unity·游戏引擎·shader
玖玥拾1 天前
Cocos学习笔记:关卡系统、音频管理与物理控制
游戏引擎·cocos2d
小拉达不是臭老鼠1 天前
Unity中的UI系统之UGUI_登陆面板实现
ui·unity
郝学胜-神的一滴1 天前
[简化版 GAMES 101] 计算机图形学 11:频域·卷积·抗锯齿
c++·unity·图形渲染·opengl·three·unreal
玖玥拾1 天前
Cocos学习笔记:滚动视图、关卡系统与本地存储
游戏引擎·cocos2d
元气少女小圆丶2 天前
SenseGlove Nova 2+Unity开发笔记2
笔记·unity·游戏引擎