卷 VI · 完CH 22深度 22/24

为什么九成的游戏做不完

这一章大概是全书最扫兴、也最值钱的一章。因为在你会不会做游戏这件事上,最大的变量不是才华、不是技术、不是点子 —— 是你能不能把一个东西做完。而做完是一种需要单独学的技能,它和「会做游戏」几乎是两回事。

范围蔓延三笔账动力曲线90% 陷阱怎么砍

先看那条永远后退的线

下面这个模拟器里,每个功能都有三笔账。默认只勾了核心玩法,你往上加功能试试。

建议试法:先勾「10 个关卡」和「存档系统」,看日期。然后再勾「Boss 战」「技能树」「多结局」。最后勾上「联机合作」。

◆ 三笔账
  1. 账面工作量:这个功能本身要做多久。这是你唯一会估的一笔,也是最小的一笔。
  2. 两两纠缠:每两个功能之间都要互相适配。存档要能存技能树、技能树要能影响 Boss 战、Boss 战要能触发多结局……n 个功能有 n(n−1)/2 对
  3. 风险缓冲:你没做过的东西一定会超时。越陌生的功能,超得越多。

第 2 笔账是按功能对数增长的,不是按功能个数。这就是范围蔓延的数学形状 —— 加第 10 个功能的成本,远高于加第 2 个。

而人在估算时,几乎只会算第 1 笔。这是为什么每个人的项目都超期,而且超得比想象中多得多。

项目不是被「做什么」杀死的

没有人一开始就打算做一个三年做不完的游戏。它是这样发生的:

第 1 周   做了个角色能跑能跳。挺好玩的!
第 3 周   做了三个关卡。要是有个 Boss 就更好了。
第 6 周   Boss 做完了。玩家死了要重来太麻烦,加个存档吧。
第 9 周   存档做完了。既然有存档,那加个技能树很自然吧?
第 14 周  技能树做完了,但现在关卡太简单了,得重做。
第 20 周  关卡重做中。突然想到:要是能和朋友一起玩……
第 30 周  联机做了一半,发现要重构所有的游戏逻辑。
第 40 周  已经三个月没碰这个项目了。
第 52 周  「我下次要做个小一点的。」

看这条线里的每一步。每一个决定单独看都很合理 —— 加 Boss 让游戏更完整,加存档解决了真实的痛点,加技能树增加了深度。

问题不在任何单个决定,在于它们的累积,而累积的速度比你感觉的快得多。

◆ 一句可以贴在显示器上的话

项目不是被「做什么」杀死的,是被「顺便也做一下这个吧」杀死的。

动力曲线:真正的敌人

上面算的都是工作量。但个人项目真正的杀手不是工作量,是动力 —— 而动力有一条非常固定的形状:

动力
 ↑
 │████                                          第 1–2 周:兴奋期
 │████▇▇                                        什么都新鲜,进展飞快
 │████▇▇▆▆
 │████▇▇▆▆▅▅                                    第 3–8 周:平稳期
 │████▇▇▆▆▅▅▄▄▄▄▄▄                              还行,有产出
 │████▇▇▆▆▅▅▄▄▄▄▄▄▃▃▃
 │████▇▇▆▆▅▅▄▄▄▄▄▄▃▃▃▂▂▂▂▂▂▂▂                   第 9 周之后:沙漠期
 │████▇▇▆▆▅▅▄▄▄▄▄▄▃▃▃▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁       ← 大多数项目死在这里
 └──────────────────────────────────────────→ 时间
◆ 沙漠期是什么

大约在第 8–12 周,你会进入一个阶段:

  • 新鲜感没了 —— 所有技术问题都解决过一遍了
  • 核心玩法已经定型 —— 不再有「哇」的时刻
  • 剩下的全是产出:做第 7 个关卡、第 8 个关卡、调 UI、修 bug
  • 而且你已经对自己的游戏免疫了 —— 玩一百遍之后你感觉不到它好玩

这时候,一个新点子出现了。它闪闪发光,充满可能性,让你想起第 1 周的那种兴奋。

于是你开了一个新项目。这就是「第二个游戏综合症」,是个人开发者最常见的死法。

怎么活过沙漠期

三条实在的建议:

  1. 把范围压到能在沙漠期到来之前做完。这是唯一的根本解 —— 也是为什么第 3 章建议 8–12 周。你不是在跟工作量赛跑,是在跟自己的动力曲线赛跑。
  2. 给自己安排外部的兑现。沙漠期缺的是反馈。给别人玩、发一段短视频、参加一个 jam、定一个公开的发布日期 —— 外部的一点点回应,能补上内部枯竭的动力。
  3. 把新点子写下来,然后继续。准备一个文件叫「下一个游戏」。新点子出现时郑重地写进去。这个动作能骗过大脑:你没有放弃那个点子,你只是排期了。

90% 陷阱

软件工程的老笑话,在游戏上尤其准:

前 90% 的工作占掉 90% 的时间。
剩下 10% 的工作占掉另外 90% 的时间。

「感觉快做完了」的那个时刻,通常离真正做完还有和之前一样长的路。因为剩下的那些事,是你一直在推迟的、不好玩的、但又不能不做的东西:

最后 10% 里藏着常见耗时
主菜单、设置、暂停界面3–7 天
各种分辨率适配、窗口 / 全屏切换2–4 天
音量控制、按键重绑2–3 天
存档的边界情况(存档损坏、版本升级)3–5 天
打包、图标、商店页面、截图、宣传视频5–10 天
找人测试、根据反馈修改1–3 周
那些「等有空再修」的 bug无法预估
◆ 对策:把「最后 10%」提前做掉一部分

不要把所有不好玩的工作都堆到最后 —— 那会让沙漠期变成沙漠季。

具体做法:在项目早期就搭一个「能发布的空壳」。

  • 第 1 周就做出:标题画面 → 一个关卡 → 通关画面 → 回到标题
  • 这个循环是完整的,只是内容极少
  • 然后你的所有工作都是在往一个已经完整的东西里填内容

好处:你的项目在任何时刻都是「可发布」的,只是内容多少的区别。这在心理上是巨大的差异 —— 你不再是在「做一个还没完成的东西」,而是在「让一个已经完成的东西变得更好」。

怎么砍:一套具体的方法

说了这么多「要砍」,具体怎么砍?下面这套判据是可以直接用的。

第一步:把所有功能列出来,分成三档

定义怎么处理
必须 没有它,这个游戏就不成立
应该 没有它游戏还能玩,但会明显差一些 全部推迟,等「必须」做完再回来看
想要 有了会很酷 写进「下一个游戏」文件

关键在于诚实。测试方法:把这条功能删掉,你的一句话玩法(第 3 章)还成立吗?

  • 还成立 → 它不是「必须」
  • 不成立 → 它是「必须」

用这个判据过一遍,你会发现「必须」通常只有三到五条。其他的全是你以为自己需要的。

第二步:对每个「应该」问一个问题

如果玩家只玩 15 分钟,他会注意到这个功能不存在吗?

不会 → 砍。

这个问题特别能识破那些「专业感」需求:

  • 按键重绑:15 分钟的游戏里,绝大多数人不会去改键 → 砍(但要选一套通用的默认键位)
  • 多语言:先发一个语言 → 砍
  • 成就系统 → 砍
  • 存档:如果一局 15 分钟 → 砍
  • 设置菜单:只留音量和第 13 章那个震动开关 → 大幅砍

第三步:识别「伪装成小功能」的大功能

有些功能听起来很小,但会污染整个代码库。它们的特征是需要所有其他系统都为它做适配

听起来实际上
「加个存档」每一个有状态的对象都要能序列化和恢复;版本升级要兼容
「加个暂停」每一个计时器、动画、粒子、音效都要能被冻结和恢复
「加个撤销」所有状态变化都要可逆,或者要做完整的状态快照
「加个联机」所有游戏逻辑都要确定性 / 可同步,工作量至少 ×2.5
「加个重玩录像」整个游戏必须是确定性的(第 19 章的固定步长)
「支持手柄」所有 UI 都要能用方向键导航,所有提示要能切换图标
◆ 判据:它会不会让我改动已有的每一个文件?

会 → 这是基础设施,不是功能。它要么在项目一开始就决定做(那时成本最低),要么就永远不做。

最糟的时机是中途加。那时你已经有了几十个不为它设计的对象,每一个都要回头改。

所以这类东西必须在第一周就做决定,写进第 3 章那张一页纸的「明确不做的三件事」里。

时间估算:为什么你总是估少

还有一个更基础的问题:人估算时间的方式是系统性偏低的,而且这个偏差不会因为经验增加而消失。

原因是规划谬误:估算时,人想象的是「一切顺利的情况」。而一切顺利的情况从不发生。

你估算时想的实际会发生的
写这个功能要 4 小时写代码 4 小时 + 调试 3 小时 + 发现和已有系统冲突 2 小时 + 改设计 2 小时
做一个关卡要一天做出来半天,玩了发现不好玩,重做两次
找素材半小时挑了两小时,导入后发现风格不搭,重挑
连续工作中间有生活、有工作、有生病、有没心情
◆ 两条比「更努力地估算」有效得多的做法

一、用你的历史数据,不用你的直觉。

记录你实际花的时间,哪怕只是粗略地记。做完三四个功能后,你会得到一个属于你自己的系数(通常在 2× 到 3× 之间)。以后估完直接乘上去。

这个系数比任何通用建议都准,因为它包含了你的具体情况 —— 你的技术水平、你的完美主义程度、你每周实际有多少小时。

二、估「有效工作日」,不估「日历日」。

业余开发的真实数字通常是每周 1–2 个有效工作日(本页那个模拟器就是按每周 2 天算的)。很多人按「每周 7 天,每天 2 小时」来规划,然后在第三周就崩了 —— 因为那个节奏不可持续。

一个反向的用法

知道了自己的系数之后,可以反过来用它来定范围

我想在 3 个月内做完                    → 约 24 个有效工作日
我的估算系数是 2.5×                    → 只能装下「我估计 10 天」的东西
那么:我的功能清单总估算不能超过 10 天

现在回去砍到 10 天为止。

这个算法很粗暴,但它把「范围控制」从一个意志力问题,变成了一个算术问题。而算术问题比意志力问题好解决得多。

「完成的定义」

回到一页纸的第 5 栏。这一栏现在该兑现了。

你需要一个写在纸上的、具体的、二值的完成条件。不是「等我觉得好了」—— 那一天永远不会来,因为你会一直看到能改进的地方。

【完成的定义】示例

这个游戏在满足以下全部条件时,就发布:

  □ 5 个关卡,每个都能从头玩到尾不卡死
  □ 第 1 关是无字教学,测试过的人 5 个里有 4 个能自己通过
  □ 有标题画面、通关画面,能重新开始
  □ 有音量滑块和屏幕震动开关
  □ 至少 5 个没玩过的人完整通关过,且记录了他们卡住的地方
  □ 已知的会导致卡死 / 崩溃的 bug 全部修完
  □ 视觉 bug 和「不够好看」的地方:不修

不满足以下任何一条,也发布:
  ✗ 美术不满意
  ✗ 想加的第 6 关
  ✗ 那个我一直想优化的手感细节
◇ 最后那三条是认真的

你一定会在发布前觉得「再打磨一下会好很多」。

这个感觉永远不会消失,因为它不是关于游戏的,是关于你的。把作品交出去让陌生人评判,是一件让人恐惧的事,而「再打磨一下」是最体面的拖延借口。

识别方法:如果你说不出「打磨完之后,具体哪一条完成条件会从未满足变成满足」,那你就是在拖延。

一个反面的安慰

最后说点别的。

这一章的调子很像在训话,但我想说清楚一件事:做不完不是道德问题。

做废的项目也有价值 —— 你学到的东西是真的。很多人的第三个游戏之所以能做完,正是因为前两个做废了。

真正要避免的不是「做废一个项目」,是一直在同一个地方做废:每次都在第 8 周弃坑,每次都学到同样的东西,每次都没有经历过「发布」这个环节。

◆ 所以这一章真正的目标

让你至少完整地走完一次。哪怕做出来的东西很小、很糙、只有二十个人玩过。

因为「完成」这条链上的最后几环 —— 打磨、找人测试、被批评、修改、上架、看数据 —— 是只能靠走一遍才能拿到的知识。而这些知识,恰恰是把「会做游戏的人」和「能出游戏的人」分开的那部分。

本章小结

  • 每个功能有三笔账:账面工作量、两两纠缠(按 n² 增长)、风险缓冲。人只会估第一笔。
  • 项目不是被「做什么」杀死的,是被「顺便也做一下这个吧」杀死的。
  • 真正的敌人是动力曲线,第 8–12 周的沙漠期是最大的死亡点。
  • 活过沙漠期:压缩范围到能在它到来前做完、安排外部兑现、把新点子写进「下一个游戏」文件。
  • 90% 陷阱:对策是第 1 周就搭一个「能发布的空壳」,让项目在任何时刻都是可发布的。
  • 砍的三步:必须/应该/想要分档 → 问「玩 15 分钟会注意到吗」→ 识别伪装成小功能的基础设施
  • 基础设施(存档、暂停、撤销、联机、录像、手柄)要么第一周决定,要么永远不做
  • 写下二值的完成定义,包括「不满足以下条件也发布」那几条。
⇄ 换个类型
  • 叙事 / 剧情向范围最容易失控的类型,因为写字看起来很便宜。一条硬规则:先把全部文本写完再做游戏。文本量是这类项目唯一可靠的范围指标,而它在做的过程中会不受控地膨胀。
  • 模拟经营 / 沙盒:危险在于「再加一种资源就更有意思了」—— 而每种新资源都要和已有的所有资源发生关系(正是第 2 笔账)。对策:先锁死资源种类的数量,再设计。
  • 肉鸽:危险在于「再加十张卡 / 十个道具」。这类内容看起来是线性增加,实际是组合爆炸的测试量 —— 每张新卡都要和已有的所有卡一起测。对策:把内容量当成一个有上限的预算,而不是一个可以一直加的东西。
  • 平台 / 动作:范围相对好控(关卡数量是线性的),主要危险是「再加一个能力」。第 4 章那条判据在这里也是范围判据:能不能和已有能力组合?不能就别加。
  • 塔防:危险是塔的种类。每加一种塔,都要重新平衡所有关卡。五种塔做深,远好过十五种塔做浅 —— 而且省下的是指数级的平衡工作量。