第 1 章 开场:你玩的不是一个”视频”,是一个”正在发生的世界”
先别急着打开 Unity。咱们把一件事掰清楚,因为它决定了你后面所有概念的理解角度。
你有没有想过:电影和游戏,表面上都是”屏幕上一连串会动的画面”,但骨子里是两种完全不同的东西?
电影是什么?是一卷早就拍好的胶片。导演在某个星期二把它拍完了,封进罐头,十年后你按下播放键,看到的还是那个星期二发生的事。它是一段回放。
游戏呢?你按下”开始”的那一刻,画面是当场算出来的。你往左走,画面就往左生成;你开了一枪,那一帧的火光、声音、敌人反应,全是在你这台机器上,这一瞬间实时算出来的。它是一场演算。
这就是”实时(real-time)“三个字的分量。
1.1 为什么”实时”这件事,值得单独拎出来说
我问你一个问题,你先自己琢磨一下:
如果游戏不用实时计算,而是像电影一样,把所有画面预先录好,玩家按键时直接放对应的录像——这样行不行?
你可能会说:那得录多少啊?玩家有无限种走位、无限种操作组合,根本录不过来。
对,这是最直观的死穴。但还有更深的一层:电影是”被动观看”,游戏是”主动改变”。 你扔一块石头,它该落在哪、撞到谁、发出什么声音,取决于这一刻世界的状态——而这些状态,是上一帧你和世界互动的结果。它是一条因果链,不是一段预先写死的脚本。
所以游戏引擎干的事,本质是一条流水线:
读输入(你按了什么)
→ 更新世界(石头飞出去了、敌人发现了你)
→ 算画面(这一帧该画什么)
→ 算声音(该响什么)
→ 64 毫秒内全部搞定,送到你眼睛和耳朵
注意那个”64 毫秒”。人眼对”流畅”的容忍线,大约是每秒 15 帧以上才不觉得卡;想”丝滑”,得 30–60 帧。一帧 1/60 秒 ≈ 16.6 毫秒。再扣掉系统开销,引擎大概只有十几毫秒去算完上面那一整条链。
这就是游戏开发里一切”将就”的根源:因为要在极短时间内算完,所以很多东西是”假”的、“近似”的、""糊弄”的。 而你会发现——雾化是糊弄,光照是糊弄,声音衰减也是糊弄。它们不是偷懒,是在”实时”这条铁律下,工程师想出的聪明办法。
1.2 一个会颠覆你认知的比喻
把游戏想象成一家极忙的餐厅:
- 顾客(你)每 16 毫秒点一道菜(一次操作)。
- 厨房(引擎)必须在 16 毫秒内把这道菜做出来、摆盘、端上桌。
- 厨房没有”提前做好一万道菜等你点”的奢侈——因为顾客组合无穷多。
所以厨房怎么办?它用半成品 + 快速组装:汤底提前熬好(预计算),上桌前才淋上现成的浇头(实时合成)。游戏里也是:复杂的光照提前”烤”进贴图(烘焙),运行时只做简单的叠加。
你后面会反复看到这个套路:把贵的计算提前做掉,运行时只做便宜的拼装。 记住这句话,它是理解一大半引擎设计的钥匙。
1.3 这本教程打算带你建立什么
不是教你点哪个菜单、写哪行 C#。那些你查文档就会。
我要带你建立的,是一张**“概念地图”**:当某天你在 Unity 里看到 Lighting、Fog、AudioSource、Camera.projectionMatrix 这些词时,你脑子里立刻能浮出:
- 它对应现实世界的什么现象?
- 没有它,游戏会出什么洋相?
- 工程师用哪几个参数来对付它?
- 我该往哪个方向拧,才能达到我要的效果?
具体到你点名想搞懂的几块:
- 音视频怎么存进计算机、存了哪些信息 → 第 9、10、11 章,我会从”声音是波”讲到采样率、位深、声道,再讲到 WAV 和 MP3 到底差在哪、为什么游戏要流式加载。
- 远处看不清的雾化 → 第 8 章,从空气透视这种自然现象,讲到为什么游戏要”故意”把远处弄糊,再逐个拆
fogColor/fogStart/fogEnd/fogDensity。 - 坐标 → 第 2 章,从”你在哪”讲到局部 / 世界 / 屏幕三套坐标,再到”为什么同一个物体在不同眼里位置不同”。
你看,全是”先问为什么,再给参数”。这路子一旦走顺,你以后看任何引擎的参数面板,都不会再发怵。
1.4 一个现在就能想的小问题
在翻下一章之前,先想一个特别朴素的事:
你站在房间里,闭着眼也能大概说出”桌子在我左边、门在我正前方”。你的大脑是靠什么知道这些位置的?
是参照物。你说”左边”,是以”你面朝的方向”为参照;你说”桌子在墙边”,是以”墙”为参照。有没有可能,同一张桌子,在你眼里是”左边”,在另一个面朝相反方向的人眼里是”右边”?
当然可能。
那问题来了:计算机要描述”桌子在哪”,总得先定一个”站在谁的角度”吧?这个看似 trivial 的问题,正是下一章坐标系统的全部由来。
【思考题】
- 电影和游戏最核心的区别是什么?用你自己的话讲一遍。
- 为什么游戏里大量使用”假”的效果(近似、糊弄)?根本原因是什么?
- 如果一台机器算一帧要 100 毫秒,玩家会体验到什么?用”餐厅”比喻解释。
- 试着举一个你生活中”提前准备半成品、用时快速组装”的例子(不限于游戏)。
【参考答案】
- 电影是预先录好的回放,游戏是当场实时演算。关键在”因果”:游戏里下一刻的画面取决于你刚才的操作和世界的当前状态,是一条实时计算的因果链;电影则是固定的录像。
- 根本原因是”实时”这条铁律——引擎只有十几毫秒去算完一整帧的画面、声音、逻辑。在这么短时间没法做”完美真实”的计算,所以工程师用近似、预计算、假效果来换流畅。这不是偷懒,是在约束下的最优解。
- 100 毫秒一帧 ≈ 每秒 10 帧,低于流畅线,玩家会觉得明显卡顿、操作跟手感差。用餐厅比喻:每道菜厨房要做 100 毫秒才端上来,顾客连点几道就排起长队,体验崩坏。
- 开放题。常见例子:方便面(面提前煮熟脱水,吃时冲水组装)、PPT 模板(版式提前做好,填字即可)、做饭的备菜(切好冻起来,炒时快)。核心都是”把贵的步骤提前,便宜的拼装留到用时”。