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。
相关推荐
RReality2 小时前
【Unity UGUI】ScrollRect 与 Scrollbar 深度用法
unity·游戏引擎
人邮异步社区2 小时前
如何自学游戏引擎的开发?
unity·程序员·游戏引擎
郝学胜-神的一滴4 小时前
[简化版 Games 101] 计算机图形学 05:二维变换下
c++·unity·图形渲染·three.js·opengl·unreal
mxwin17 小时前
Unity URP 热更新兼容性:Shader 在 IL2CPP 打包下的注意事项
unity·游戏引擎
mxwin21 小时前
Unity shader中TransformWorldToShadowCoord原理解析
unity·游戏引擎·shader
mxwin1 天前
Unity Shader 中 ShadowCaster的作用和疑问
unity·游戏引擎
mxwin1 天前
Unity Shader中如何学习阴影技术 产生阴影,接受阴影,联级阴影,软阴影
学习·unity·游戏引擎·shader
♡すぎ♡1 天前
ShaderLab:线条几何体旋转
unity·计算机图形学·着色器·shaderlab
小贺儿开发1 天前
【MediaPipe】Unity3D 指间游鱼互动演示
游戏·unity·人机交互·摄像头·手势识别·互动·康复训练