第 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 的问题,正是下一章坐标系统的全部由来。

【思考题】

  1. 电影和游戏最核心的区别是什么?用你自己的话讲一遍。
  2. 为什么游戏里大量使用”假”的效果(近似、糊弄)?根本原因是什么?
  3. 如果一台机器算一帧要 100 毫秒,玩家会体验到什么?用”餐厅”比喻解释。
  4. 试着举一个你生活中”提前准备半成品、用时快速组装”的例子(不限于游戏)。

【参考答案】

  1. 电影是预先录好的回放,游戏是当场实时演算。关键在”因果”:游戏里下一刻的画面取决于你刚才的操作和世界的当前状态,是一条实时计算的因果链;电影则是固定的录像。
  2. 根本原因是”实时”这条铁律——引擎只有十几毫秒去算完一整帧的画面、声音、逻辑。在这么短时间没法做”完美真实”的计算,所以工程师用近似、预计算、假效果来换流畅。这不是偷懒,是在约束下的最优解。
  3. 100 毫秒一帧 ≈ 每秒 10 帧,低于流畅线,玩家会觉得明显卡顿、操作跟手感差。用餐厅比喻:每道菜厨房要做 100 毫秒才端上来,顾客连点几道就排起长队,体验崩坏。
  4. 开放题。常见例子:方便面(面提前煮熟脱水,吃时冲水组装)、PPT 模板(版式提前做好,填字即可)、做饭的备菜(切好冻起来,炒时快)。核心都是”把贵的步骤提前,便宜的拼装留到用时”。