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。
相关推荐
_ZHOURUI_H_12 小时前
MyFramework: 同样是 Unity 游戏开发框架,和 HTFramework 的设计取向有什么不同?(下)
unity·游戏引擎·游戏开发·游戏ui·手游开发
丁小未2 天前
基于MVVM框架的XUUI 扩展的UI管理系统教程
unity·mvvm·ui框架·xuui·ui管理器
丁小未3 天前
基于MVVM框架的XUUI HelloWorld 新手教程
unity·性能优化·c#·游戏引擎
丁小未3 天前
基于MVVM框架的XUUI MoreComplex案例
unity·c#
EQ-雪梨蛋花汤3 天前
【Unity笔记】VR 一体机画面锯齿、模型边缘闪烁、接缝抖动排查:MSAA、Mipmap、Render Scale、Z-Fighting 全流程记录
笔记·unity·vr
松树戈3 天前
【Godot4精进之路】03~Godot编辑器常用界面介绍
编辑器·游戏引擎·godot
YigAin3 天前
Unity Spine 资源出现白边的解决办法
unity·游戏引擎·spine
郝学胜-神的一滴4 天前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
_helen_5204 天前
unreal engine 虚拟现实 + airsim
游戏引擎·vr·虚幻
真鬼1235 天前
【Unity WebGL】内嵌网页与双向通信
unity·游戏引擎·webgl