打磨:看别人玩,然后闭嘴
你已经玩了自己的游戏一千遍。你知道每一个机关在哪、每一个敌人什么时候出现、每一个跳跃该在哪里起跳。这意味着你已经完全丧失了评价它的能力。你需要的不是再玩一遍,是找一个从没玩过的人,坐在他旁边,然后 —— 这是最难的部分 —— 一句话都不说。
你已经不是玩家了
这是打磨阶段的前提,必须先接受它。
作为作者,你身上有三样玩家没有的东西:
- 你知道所有答案。你没法体验「不知道该干什么」是什么感觉。
- 你有肌肉记忆。你玩了一千遍,你的操作水平远超任何新玩家。你觉得「这关挺简单」是没有意义的判断。
- 你知道意图。你看到一个色块,知道它「代表」一扇门。玩家看到的只是一个色块。
而且是没玩过的别人。同一个人只能给你一次「第一次玩」的数据 —— 用掉就没了。
这有一个直接的推论:要珍惜你的测试者。不要在游戏还很粗糙的时候把所有朋友都用掉,等到真正需要验证的时候,你已经没有「新人」了。
建议:垂直切片(第 18 章)之前不要找人测。那之前的问题你自己就能发现。
一次有用的玩家测试怎么做
规则零:闭嘴
这是全章最重要的一条,而且它比听起来难十倍。
玩家会卡住。他会往错误的方向走。他会没看见那个明显的按钮。他会用完全不对的方式尝试。
你会有一股强烈到生理性的冲动想开口说:「那个……你要往右走。」
忍住。
因为你不可能站在每个玩家旁边。
他卡住的那个地方,是真实存在的设计缺陷。你一开口,就把这个缺陷从数据里抹掉了 —— 而这次测试的全部价值,就在于发现这些缺陷。
换个说法:你想开口的每一个瞬间,都是一条待办事项。
所以:手边放一张纸。每次你想说话的时候,不要说,把它写下来。测试结束后,那张纸就是你的修改清单,而且是按优先级自动排好序的(你越想开口的地方,问题越严重)。
唯一允许说的话
只有一句,而且要在开始前说清楚:
「你可以随时说出你在想什么,但我不会回答。我不是在测试你,我是在测试这个游戏。你卡住了是我的问题,不是你的。」
最后那句很重要。人在别人面前玩游戏卡住时会尴尬,会觉得自己笨,然后会开始假装懂了 —— 那时候数据就污染了。明确地把责任揽过来,他才会放松。
要求「出声思考」
请玩家把心里想的说出来。这是从测试里榨取信息的关键技巧。
你想听到的是这种:
「这是什么……哦,是个敌人吗?」 「我踩它试试……啊死了。」 「所以不能踩。那要绕过去?」 「这个门是不是要钥匙……我去找找。」 「(沉默 40 秒)……嗯,我不知道该干嘛了。」
那个 40 秒的沉默,比任何问卷都有价值。
记录什么
| 记什么 | 为什么 |
|---|---|
| 每一次卡住的位置和时长 | 超过 30 秒的困惑就是一个问题 |
| 每一次死亡的位置 | 同一个地方死 3 次以上 = 难度或引导问题 |
| 他说错的名词 | 他把「能量」叫成「血」→ 你的 UI 表达失败了 |
| 他没用的机制 | 给了冲刺但他全程没冲 → 教学失败(第 21 章) |
| 他放下手柄 / 松手的时刻 | 那是注意力断掉的地方 |
| 他笑 / 皱眉 / 前倾的时刻 | 这些是你唯一能拿到的情绪数据 |
| 你想开口的每一次 | 见上 |
如果你只能观察一件事,观察前三分钟。
因为这是玩家决定要不要继续的窗口,而且是你的转化率漏斗里最陡的一段。在这三分钟里你要确认:
- 他知道自己在控制什么吗?(30 秒内)
- 他知道该往哪走吗?(1 分钟内)
- 他做过一次让他觉得有意思的事吗?(2 分钟内)
- 他知道自己的目标是什么吗?(3 分钟内)
任何一条没做到,后面做得再好也没用 —— 因为他不会玩到那里。
怎么读反馈:玩家说的问题往往不是真问题
这是打磨阶段第二重要的技能。
有一条被反复验证的经验法则(来自游戏和产品设计两个领域):
玩家非常擅长指出「哪里不对」,非常不擅长指出「为什么不对」,也几乎从不擅长说「该怎么改」。
| 玩家说 | 可能的真实问题 |
|---|---|
| 「这里太难了」 | 可能是难度,但更可能是:他不知道该用什么方法(引导问题)、失败成本太高(第 7 章)、或者反馈不足让他不知道自己差在哪 |
| 「操作不跟手」 | 卷 III 的十二个零件之一。要自己去排查,别问他 |
| 「有点无聊」 | 可能是循环断了(第 5 章)、假选择(第 6 章)、节奏平坦(第 16 章)。问他「哪一段最无聊」比问「为什么无聊」有用得多 |
| 「我希望能有个小地图」 | 真实问题是他迷路了。小地图是他能想到的解法,但更好的解法可能是改关卡的辨识度 |
| 「这个敌人太烦了」 | 可能是它打断了玩家的节奏、或者它的攻击没有预告(第 11 章)、或者它出现的时机不对 |
把玩家的反馈当成「症状」,不要当成「诊断」,更不要当成「处方」。
他说「想要小地图」→ 记下的是「他在第 3 关迷路了」,不是「要做小地图」。
然后你去想:为什么会迷路?是不是所有房间长得太像?是不是没有方向指引?加了小地图能治标,但改了房间辨识度能治本,而且更便宜。
但有一类反馈要直接采信
观察到的行为,不需要翻译,直接采信:
- 他在这里卡了 2 分钟 → 这是事实
- 他从来没用过冲刺 → 这是事实
- 他在第 4 关放下了手柄 → 这是事实
- 他试了三次跳跃都撞到那个角 → 这是事实(去看看要不要加边角宽容,第 10 章)
行为数据是硬的,语言数据是软的。这就是为什么「看他玩」比「问他感受」有价值得多。
几个人才够
好消息:比你想的少得多。
- 第 1 个人:会暴露最严重的问题(通常是引导和前三分钟)
- 第 2–3 个人:确认第 1 个人的问题是普遍的还是个人的
- 第 4–5 个人:开始重复,新信息变少
所以:5 个人一轮,改完再找 5 个新的。两轮 10 个人,能解决绝大多数问题。
如果你一次给十个人测,会发生什么?前三个人都卡在同一个地方,后面七个人也会卡在那里 —— 你用十个人的份额,买到了三个人的信息。
正确做法:测 3–5 个 → 改 → 再测 3–5 个新的。迭代比样本量重要。
找什么样的人
- 不玩这类游戏的人特别有价值 —— 他们会暴露你所有「这不是常识吗」的假设
- 不是程序员的人更好 —— 程序员会本能地体谅你,然后给出被污染的反馈
- 亲密的朋友和家人价值最低 —— 他们会说「挺好的」。除非你能明确要求他们说实话,否则别把测试名额浪费在他们身上
打磨的顺序
反馈收集完了,你有一张长长的清单。按什么顺序做?
| 优先级 | 类别 | 判据 |
|---|---|---|
| P0 | 崩溃、卡死、进度丢失 | 会让玩家永久离开的东西 |
| P1 | 前三分钟的一切问题 | 大多数人只会玩到这里 |
| P2 | 多个测试者都卡住的地方 | 普遍的引导 / 难度问题 |
| P3 | 手感(卷 III 的清单) | 影响全程,但不会让人立刻退出 |
| P4 | 反馈与 juice(第 11、12 章) | 锦上添花 |
| P5 | 美术细节、动画补帧 | 你会想从这里开始,但它排最后 |
如果你的游戏有存档,那么存档损坏是最严重的 bug 类型,比崩溃还严重。
崩溃让玩家骂一句重开。存档丢失让玩家永久离开,而且会写一条差评警告别人。
两条便宜的防护:
- 写入时先写临时文件,成功后再改名覆盖。这样即使写到一半断电,旧存档还在。
- 读取失败时不要清空,保留损坏的文件并加载一个空存档 —— 至少玩家还能玩,而且你能拿到那个文件去分析。
性能:什么时候该管
打磨期该做一次性能检查,但不要过早优化。
几条实用的:
- 测最差情况,不是平均情况。屏幕上敌人和特效最多的那一刻,帧率是多少?
- 关注帧率的稳定性,超过绝对值。稳定 45 帧比在 60 和 30 之间跳要好得多(第 10 章:玩家对延迟波动比对延迟本身敏感)。
- 在你能找到的最差的机器上测一次。你的开发机不代表玩家的机器。
- 2D 游戏最常见的性能问题:粒子数量、每帧的节点创建 / 销毁(改用对象池)、以及在
_process里做了本该在_physics_process或者根本不该每帧做的事。
频繁 instantiate() 和 queue_free()(子弹、粒子、伤害数字)是 2D 游戏卡顿的头号来源。
class_name Pool extends Node @export var scene: PackedScene @export var initial_size: int = 32 var _free: Array[Node] = [] func _ready() -> void: for i in initial_size: _free.append(_make()) func _make() -> Node: var n := scene.instantiate() n.set_process(false) n.set_physics_process(false) add_child(n) n.hide() return n func take() -> Node: var n: Node = _free.pop_back() if not _free.is_empty() else _make() n.show() n.set_process(true) n.set_physics_process(true) return n func give(n: Node) -> void: n.hide() n.set_process(false) n.set_physics_process(false) _free.append(n) # 不 free,放回池子
对象自己回收时调 pool.give(self) 而不是 queue_free()。注意:回收时必须重置对象的全部状态,否则会带着上一次的残留数据复用 —— 这是对象池最常见的 bug。
什么时候停止打磨
回到第 22 章那张「完成的定义」。打磨阶段最容易无限延长,因为总有能改进的地方。
- 完成定义的清单全部打勾了。那就发。
- 新一轮测试者没有发现新的 P0–P2 问题。剩下的都是「要是……就更好了」,那说明你已经到了收益递减区。
- 你已经连续两周在改「没人会注意到」的东西。那是拖延,不是打磨。
还有一条更根本的:你的第一个游戏,它的价值不在于它有多好,而在于它被完成了。多打磨两周不会让它从「小作品」变成「杰作」,但会让你少两周时间去做下一个 —— 而下一个才是真正会变好的那个。
本章小结
- 你已经不是玩家了:你知道答案、有肌肉记忆、知道意图。你的判断不可信。
- 规则零:闭嘴。你想开口的每一个瞬间,都是一条待办事项 —— 写下来,别说出口。
- 开场只说一句:「我不是在测试你,我是在测试这个游戏。」
- 要求出声思考;记录卡住、死亡、说错的名词、没用的机制、放下手柄的时刻。
- 最重要的窗口是前三分钟:控制什么、往哪走、有意思的事、目标是什么。
- 玩家的反馈是症状,不是诊断,更不是处方。但观察到的行为直接采信。
- 5 个人一轮,改完再找 5 个新的。迭代比样本量重要。别把名额浪费在会说「挺好的」的人身上。
- 打磨顺序:P0 崩溃 / 存档 → P1 前三分钟 → P2 普遍卡点 → P3 手感 → P4 juice → P5 美术。
- 停止信号:清单打完、新测试者无 P0–P2、或者你已经在改没人会注意的东西。
- 卡牌 / 策略:除了观察,还要看数据:每张卡的选取率和胜率(第 6 章的假选择检测在真实数据上再跑一遍)。这类游戏的平衡问题肉眼看不出来,必须靠统计。哪怕只有 20 局的数据,也比直觉强。
- 叙事解谜:测试的重点是「他在哪一步的推理断了」。要额外记录:他尝试过哪些错误解法 —— 那些错误解法往往比正确解法更合理,说明你的线索指向有问题。
- 模拟经营:测试要长(至少一小时),因为问题出现得晚。重点观察玩家第二个小时还在做什么 —— 如果他开始重复同样的操作,说明第 17 章那条线出现了。
- 平台 / 动作:本章的主场。额外一条:录下他的操作(哪怕只是录屏)。你会发现他按跳键的时机和你完全不同 —— 那是调宽容窗口(第 10 章)的第一手数据。
- 塔防:观察他在哪一波开始慌,以及他的塔摆在哪。如果所有测试者都摆出同一套阵型,说明你有支配策略(第 6 章)。