矩阵与线性变换系列导航:给 Unity 开发的学习路径与实战索引

这一组文章最初是想解决一个很实际的问题:

很多 Unity 程序员知道 Transform、知道 localPosition、也知道 Shader 里有 MVP,但一旦项目里同时出现挂点、UI 跟随、程序化摆放、法线、相机空间这些问题,脑子里的知识点就会散掉。

所以我把这段内容整理成了一条从基础到实战的路线,不追求学院化推导,重点放在 Unity 项目里真正会遇到的落点上。

如果你最近正好在补矩阵、线性变换、坐标空间这块,可以直接按下面的顺序看。

一、这个系列适合谁

我觉得这组文章比较适合下面几类 Unity 开发者:

  • 做客户端业务,但经常碰到坐标、朝向、挂点、跟随问题
  • 想看懂 Matrix4x4.TRSMultiplyPoint 这些 API 到底在干什么
  • 写 Shader 时总觉得 Object、World、View、Clip 这些空间名很绕
  • 在做棋盘、地块、程序化摆放、技能范围这些系统时,感觉空间关系总容易出错

如果你只是临时查某个 API,也可以直接跳到后面对应的专题。

二、推荐阅读顺序

1. 先把基础概念站稳

  1. 矩阵、点、向量和坐标系:Unity 程序员怎么理解线性变换
  2. 旋转、缩放、错切与顺序:从二维线性变换开始理解矩阵
  3. 齐次坐标、3x3 到 4x4:为什么平移也能写进矩阵

这一段解决的是“矩阵到底是什么”以及“为什么平移、旋转、缩放能被统一处理”。

2. 再把 Unity 里的坐标空间串起来

  1. local、world 和 parent-child:Unity Transform 背后的矩阵关系
  2. Matrix4x4.TRS、顺序和程序化摆放:Unity 里怎么真正用矩阵

这一段开始从纯概念切回 Unity 代码。看到这里,你基本就能把 Transform、父子层级和 TRS 这几个最常见落点串起来了。

3. 接着补图形与渲染侧的空间意识

  1. Shader 里的 MVP:顶点从模型空间到裁剪空间经历了什么
  2. 非等比缩放为什么会搞坏法线:normal matrix 与渲染细节

这一段不是为了让客户端程序员转图形程序员,而是为了把很多“知道名词但没连起来”的空间概念打通。

4. 最后看最常落到业务和排查里的场景

  1. UI、屏幕、世界坐标来回转换:Unity 常见矩阵应用
  2. InverseTransformPoint、MultiplyPoint 和 Gizmos:矩阵排查技巧
  3. 把矩阵知识真正用进项目:动画、相机、地块和程序化摆放

这一段更偏工程实战。很多真正让人头疼的问题,不是考试题,而是“线上表现不对,但又说不清是哪层空间错了”。

三、如果你只关心某一类问题,可以这样跳读

如果你现在手里的问题比较明确,不一定非要从头顺着看。

1. 挂点、父子节点、角色朝向

优先看:

2. UI 跟随、屏幕坐标、点击映射

优先看:

3. Shader、空间名、法线、光照异常

优先看:

4. 棋盘、地块、程序化生成、批量摆放

优先看:

四、这组文章我自己最想强调的,不是公式,而是“空间意识”

我现在回头看,矩阵这块最值钱的不是手推公式本身,而是你会慢慢建立一种稳定的工程判断:

  • 这个值现在处于哪个空间
  • 这里应该传点,还是传方向
  • 这个偏移是叠加在局部空间还是世界空间
  • 这个 bug 更像是资源问题、逻辑问题,还是空间转换问题

很多项目里的疑难杂症,最后都不是不会写 API,而是空间没讲清楚。

五、推荐一个更务实的学习方式

如果你是 Unity 客户端,不建议一开始就扑进长篇数学教材里。

我更推荐这套顺序:

  1. 先把这一组文章按需看完
  2. 打开一个小场景,自己用 Gizmos 画几个点和方向
  3. 手写几次 TransformPointInverseTransformPointMatrix4x4.TRS
  4. 再回到项目里找两个真实问题,对照空间去拆

这样学得更慢一点,但会更扎实,也更接近真正能在项目里用出来的状态。

六、最后

这一页先当作这组矩阵文章的导航入口。

后面如果我继续把这个方向往下写,大概率会补几类内容:

  • 技能范围、碰撞盒、朝向判定怎么用矩阵思维统一
  • 编辑器工具里如何用矩阵减少中间节点和手工摆点
  • 二合、棋盘、SLG 地块这类系统里,空间抽象怎么提前设计得更稳

如果你是从具体 bug 查进来的,希望这页能帮你少绕一点路。