游戏开发者需要知道哪些数学知识?

Hello,各位奋斗在虚幻引擎第一线的未来大神、爆款制作人们!👋

一提到“数学”,是不是很多小伙伴的DNA就开始隐隐作痛?脑海里浮现出被三角函数、几何图形、还有各种“薛定谔的公式”支配的恐惧?(别装了,我懂你!😉)

“大佬,我数学是体育老师教的,做游戏开发还有救吗?”

“听说UE开发要懂很多高数?我还有机会做《黑神话:悟空》那样牛X的游戏吗?”

憋慌!今天咱们就来扒一扒游戏开发(尤其是用UE)里那些“你不得不知道”的数学知识。放心,不劝退,只种草!咱们的目标是让你明白,数学不是拦路虎,而是你在游戏世界里施展“魔法”的超能力!

为啥游戏开发离不开数学?

简单来说,游戏世界本质就是一堆遵循特定规则运行的数据。

  • 角色怎么动?—— 向量、速度、加速度
  • 子弹打到哪?—— 射线、碰撞检测
  • 我的人物模型怎么转个圈都那么丝滑?—— 矩阵、四元数
  • UI怎么能不多不少刚刚好适配我的屏幕?—— 比例、坐标系
  • 敌人AI怎么知道我在它背后?—— 点积、角度

看到没?全是数学在背后“撑腰”!但别怕,虚幻引擎已经帮我们封装好了很多底层的复杂运算,我们更多时候是做个“指挥家”,告诉引擎“我想让这个物体这样动”,而不是亲自去计算每一个像素点。

那么,哪些数学知识是咱们的“重点保护对象”呢?

一、向量 (Vector):游戏世界的“方向感”和“行动力”大师

这是啥玩意儿? 你可以把它想象成一个带箭头的线段,既有大小(长度),又有方向。在UE里,FVector 就是它的化身。

UE里能干啥?

  • 位置定位: 物体在地图上的坐标 (X, Y, Z) 就是个向量。
  • 方向指引: 角色朝哪走、子弹往哪飞、摄像机看向哪,都需要方向向量。
  • 速度与力: 物体的移动速度、受到的推力,都可以用向量表示。比如,给角色一个向前的速度向量,它就往前跑啦!
  • 距离计算: 想知道俩怪之间多远?两个位置向量一减,取个长度(.Size().Length())就搞定!

《绝地求生》里,你开枪子弹飞出去的轨迹,就是基于初始位置向量+方向向量(枪口指向)+速度向量的计算。

在UE蓝图里,你拖拽一个 Add Movement Input 节点,输入的 World DirectionScale Value 其实就是在默默地运用向量运算,控制角色的移动方向和速率。

二、矩阵 (Matrix):UE世界的“变形金刚”操控者

以防你不知道,这里补充单词意思:Transformer - 变形金刚;Transform 变换

这是啥玩意儿? 一个数字方阵。听起来很抽象?别急!

UE里能干啥?

  • 变换 (Transformation): 物体的移动 (Translate)、旋转 (Rotate)、缩放 (Scale),在底层都是通过矩阵乘法来实现的。UE里的 FTransform (包含位移向量、旋转四元数、缩放向量) 其实就是对矩阵操作的友好封装。
  • 坐标空间转换: 物体从自己的局部坐标系转换到世界坐标系,再从世界坐标系转换到摄像机看到的屏幕坐标系,也都是矩阵在“捣腾”。

你用UE的编辑器拖动物体,旋转它,或者放大缩小它,背后都是矩阵在疯狂运算,实时更新物体的新状态。

为什么摄像机往前推,远处的物体会变大,近处的物体会“出画”?这就是透视投影矩阵(Perspective Projection Matrix)的功劳。虽然UE帮你搞定了,但理解这个能让你在调摄像机参数时更得心应手。

三、三角函数 (Trigonometry):算角度、控旋转,精准打击全靠它!

这是啥玩意儿? 就是我们初高中学的 sin, cos, tan 这些。别回忆痛苦,它们在游戏里可好玩了!

UE里能干啥?

  • 计算角度: 敌人AI怎么判断你是否在它的扇形攻击范围内?就需要用到点积(Dot Product,其实和cos有关)或者 atan2 来计算角度。
  • 圆形/周期运动: 想让一个平台绕圈圈运动,或者做出呼吸灯效果?sincos 函数生成的周期性数值简直是完美选择。
  • 瞄准与索敌: 塔防游戏的炮塔自动转向敌人,或者FPS游戏里的辅助瞄准,都可能用到三角函数来计算旋转角度。

在一个俯视角射击游戏里,你想让角色的枪口始终朝向鼠标位置。这就需要获取角色位置和鼠标位置,算出两者形成的向量,然后用 atan2 (UE里有 FMath::Atan2) 得到准确的旋转角度,再更新角色朝向。

UE蓝图里有 Sin (Degrees)Cos (Degrees) 这样的节点,直接拖出来用,就能做出很多有趣的周期性动画或行为。

四、线性插值 (Lerp):丝般顺滑的动态效果“制造机”

这是啥玩意儿? Lerp 全称 Linear Interpolation。简单说,就是从A点平滑地过渡到B点。

UE里能干啥?

  • 平滑移动/旋转/缩放: 让一个物体从当前位置优雅地移动到目标位置,而不是“瞬移”。摄像机镜头的平滑推拉、角色血条的平滑减少。
  • 颜色过渡: 实现一个按钮被鼠标悬浮时,颜色从A平滑过渡到B。
  • 动画融合: 动画状态机里不同动画之间的平滑过渡也用到了类似原理。

当你的角色升级时,经验条不是瞬间填满,而是平滑地增长,看起来就舒服多了。这就是 FMath::Lerp 或者蓝图里的 Lerp 节点的功劳。

《守望先锋》里英雄技能的冷却CD(Cold Down),那个扇形倒计时转动得那么均匀自然,背后就有插值的影子。

五、四元数 (Quaternion):专治“旋转疑难杂症”的神秘大佬

这是啥玩意儿? 比向量更复杂一点,专门用来表示三维空间旋转的。

UE里能干啥?

  • 无万向节死锁旋转: 传统的欧拉角旋转(就是分别绕X,Y,Z轴转)在特定情况下会出现“万向节死锁”(Gimbal Lock),导致某个轴失去自由度,旋转起来会很诡异。四元数能完美避开这个坑!UE默认的旋转就是用的四元数 (FQuatFRotator 底层也是它)。
  • 平滑球面插值 (Slerp): 如果你想让一个物体从一个朝向平滑地旋转到另一个朝向,用四元数的球面线性插值 (Slerp) 效果最好。

你用UE编辑器旋转物体时,感觉怎么转都很自然,不会突然“卡住”或“翻不过去”,这就要感谢四元数的稳定表现。

飞行模拟游戏里,飞机各种风骚的空中姿态变换,用四元数来计算和插值会比欧拉角稳健得多。

六、还有一些“朴实无华但有用”的数学小兄弟们 🛠️

基础代数: 加减乘除、解个简单方程。比如计算伤害值(攻击力 - 防御力)、得分、金币数量变化等。

概率: 怪物掉宝率、开箱子出稀有道具的几率、AI做不同决策的概率。UE里有随机数节点帮你搞定。

坐标系: 世界坐标系、局部坐标系、屏幕坐标系,理解它们之间的关系对你摆放物体、处理输入、做UI适配都很有帮助。

数学不好,真的没救了吗?

当然不是!我们不是要成为数学家的,我们是游戏开发者!

  1. 虚幻引擎数学工具开箱即用: UE已经封装了绝大多数复杂的数学运算。你不需要从头推导公式,更多是理解概念,知道在什么场景下调用哪个蓝图节点或C++函数 (FMath 库里全是宝藏!)。
  2. 理解比计算更重要: 你不需要成为数学家,但你需要理解这些数学工具能帮你实现什么效果。比如,你知道Lerp能做平滑过渡,当需要这个效果时,能想到去找Lerp相关的节点或函数就行。
  3. 可视化学习: UE本身就是个强大的可视化工具。很多数学概念,比如向量的合成、物体的变换,你都可以在编辑器里直接“玩”出来,眼见为实。
  4. 从需求出发,逐步学习: 遇到具体的功能需求,比如“我想让子弹跟踪敌人”,再去针对性地查找需要用到哪些数学知识和实现方法,这样学习目标更明确,也更容易坚持。

彩蛋时间:给数学“困难户”的UE学习小贴士 😉

善用Debug工具: UE的蓝图调试器、Draw Debug Sphere/Line/Arrow 等节点,可以帮你把抽象的向量、位置、范围给“画”出来,哪里不对一目了然。

多看官方文档和社区教程: 很多教程都会结合实例讲解数学知识点的应用。

拆解案例: 看到别人做的炫酷效果,试着分析它可能用到了哪些数学原理。

动手实践: 自己动手用蓝图或C++复现一些小的数学应用场景,比如做一个简单的追逐AI,或者一个按正弦曲线移动的平台。


呼~一口气说了这么多,希望能打消你对数学的恐惧,甚至让你对它产生一丢丢兴趣!在游戏开发的世界里,数学不是枯燥的符号,而是创造乐趣与惊奇的画笔。


游戏开发者需要知道哪些数学知识?
https://god23bin.github.io/unreal-engine-blog/2025/06/04/unreal-engine/初学者/游戏开发者需要知道哪些数学知识?/
作者
god23bin
发布于
2025年6月4日
许可协议