关卡与引导:教学是设计出来的
你的游戏加了一个很棒的机制。你担心玩家不懂,于是在开头弹了一个框:「按 Shift 冲刺!」—— 玩家点掉了它,三分钟后死在一个需要冲刺的地方,然后说这游戏设计得莫名其妙。问题不在于他没看,在于「告诉」从来就不是一种有效的教学方式。这一章讲怎么用关卡本身教学,不写一个字。
为什么「告诉」没用
三个很实在的原因:
- 玩家不读文字。这不是懒 —— 他刚打开游戏,正在兴奋地想玩,弹出的框是障碍物,本能就是关掉。
- 读了也记不住。脱离情境的信息留存率极低。「按 Shift 冲刺」在他需要冲刺之前是没有意义的,而等他需要时已经忘了。
- 被告知的东西没有成就感。这条最重要 —— 玩家自己发现的东西,和被告知的东西,在体验上是两样完全不同的东西。
玩家学会了,但不觉得自己被教了。
他会觉得是自己想出来的 —— 而那种「我搞明白了」的感觉,正是游戏乐趣的一大来源。用文字告诉他,等于把这份乐趣从他手里拿走。
三条设计开关
下面这个 demo 里,「玩家」是一个会犯错的脚本:它有 60% 的概率做出正确反应,剩下 40% 乱来。一百个这样的玩家去闯同一个关卡。
三条开关改变的不是它的智力,是它犯错时要付出的代价。
三条全关时,一百个人里学会的不到七成,而且有人直接弃坑了 —— 你永远不会知道他们是谁。三条全开时,几乎所有人都学会了。
开关一:安全实验区
玩家第一次接触新东西时,犯错不该有严重后果。
具体做法:把新机制第一次出现的地方,放在一个平坦的、没有坑、没有连带伤害的位置。
为什么有效:学习需要试错,而试错需要试错便宜。如果第一次尝试就要付出死亡的代价,玩家会变得保守 —— 而保守的玩家学得慢。
第 7 章说「失败成本决定你的难度上限」。这里说「失败成本决定你的教学效率」。
本质是同一条:玩家的学习速度,与失败成本成反比。
推论:教学段落的失败成本应该趋近于零。教学关不该有死亡,或者死了就在原地立刻复活。
开关二:威胁前置
让玩家先看见它,再让它靠近。
如果一个敌人从屏幕边缘突然出现直接怼到脸上,玩家没有时间思考 —— 他只能反射性地乱按。他学不到东西,只会觉得不公平。
如果那个敌人在很远处就能被看见,慢慢靠近,玩家会有几秒钟去观察和思考:那是什么?它会做什么?我该怎么办?
这几秒钟就是学习发生的地方。
具体做法:
- 新敌人第一次出现时,放在玩家前进方向的远处,且移动速度慢
- 用第 13 章的镜头前瞻和兴趣点吸引确保它进入视野
- 危险的东西(尖刺、深坑)要在玩家有速度冲过去之前就可见
玩家往下跳,但看不见下面有什么 —— 可能是平台,也可能是尖刺。这叫「信仰之跃」(leap of faith),是平台游戏设计里公认的坏模式。
它坏在:玩家的失败不是因为技术不够,而是因为信息不足。他学不到任何东西,只会记住「这游戏喜欢阴人」。
修法:把镜头往下拉一点、加一个可以先看到底部的高台、或者干脆把危险物放在可见范围内。
开关三:奖励诱导
在正确做法的路径上放一个金币。
这是三条里最巧妙的一条,因为它不告诉玩家任何事,只是改变了他自愿走的路。
玩家看到金币会想去拿 —— 这是本能。而在去拿的过程中,他顺便执行了那个你想教他的动作。
例子:
- 想教二段跳 → 在一个只有二段跳才够得到的高度放一串金币
- 想教冲刺 → 在一个需要冲刺才能通过的缝隙后面放奖励
- 想教踩敌人 → 在敌人正上方放一个金币
- 想让玩家探索 → 在偏离主路的岔路上放东西
箭头是指令:「往这走」。玩家会照做,但那是服从。
金币是动机:「那边有好东西」。玩家会主动去,那是他自己的决定。
结果一样,体验完全不同。而且金币不会打断沉浸感 —— 它是游戏世界里的东西,箭头是叠在游戏上面的 UI。
拆一遍马力欧 1-1
这大概是被分析得最多的一段关卡设计,但值得再看一次 —— 因为它把上面三条和第 16 章的四拍,全部压缩在了大约二十秒里。
【0 秒】玩家出生在屏幕左侧,右边是一大片空地
→ 教「往右走」。没有任何文字。
马力欧站在左边、面朝右、屏幕右边有空间,
这三件事合起来只有一个含义。
【3 秒】一个问号砖块,在头顶
→ 玩家好奇,跳一下,撞出蘑菇。
教「跳」+「问号砖块有东西」。
【5 秒】蘑菇掉下来,朝玩家滚过来
→ 玩家的第一反应通常是「躲」(它长得像敌人)。
但地形限制了他 —— 蘑菇会弹回来,最终碰到他。
教「蘑菇是好东西」,而且是用一次「被迫的失败」教的。
★ 注意:这里地面是完全平的,没有坑。安全实验区。
【9 秒】第一只栗宝宝走过来
→ 地面仍然是平的。玩家怎么试都不会摔死。
他可能跳过去、可能撞上去(失去一条命但没有连带损失)、
可能踩到它。三种结果都是学习。
【15 秒】一个矮台阶 + 一只栗宝宝
→ 顺手就会跳,跳就会踩到。② 单独考核
【20 秒】两只栗宝宝一起来 ③ 提高强度
【25 秒】栗宝宝 + 需要跳过的坑 ④ 组合
任天堂面临一个问题:怎么让玩家知道蘑菇是好东西?
如果玩家躲开了它,他就学不到。所以他们做了一件事:把地形设计成让玩家躲不开。
蘑菇从问号砖块出来后,会朝玩家滚过来。玩家往右跑,蘑菇会撞到右边的管子弹回来追上他。不管玩家怎么做,他都会吃到那个蘑菇。
然后他变大了。他学到了 —— 通过被迫经历,而不是通过被告知。
这就是关卡设计的最高形态:用地形把玩家推进正确的体验里,而他以为一切都是自己的选择。
视觉语言:让玩家不用学就能看懂
除了关卡编排,还有一层更基础的:物体的样子应该说明它的功能。
| 规则 | 做法 |
|---|---|
| 颜色编码要一致 | 红色 = 危险,从头到尾都是。绝不能这一关红色是危险、下一关红色是可交互 |
| 能踩的和不能踩的要长得不一样 | 不是靠标注,是靠轮廓、材质、颜色 |
| 可交互的东西要有动静 | 轻微的浮动、闪烁、粒子。静止的东西会被当成背景 |
| 背景要明确地"退后" | 降低对比度、降低饱和度、加视差。玩家必须能一眼分辨「能踩的」和「装饰的」 |
| 新东西要在干净的背景上出现 | 第一次介绍某个机关时,周围不要有其他视觉噪音 |
前景和背景分不开。
这是个人项目最普遍的问题,尤其是当你从素材站下载了一套漂亮的背景之后 —— 背景太抢眼,玩家分不清哪些砖块能站、哪些是画上去的。
检验方法:把游戏截图转成灰度,再模糊一下。如果这样你还能一眼看出哪里能站人、哪里有危险,那视觉层次是对的。如果糊成一片,玩家在快速移动时也会糊成一片。
修法很便宜:把背景的饱和度和对比度都降下来,前景保持鲜明。这一步通常五分钟,效果立竿见影。
什么时候文字提示是对的
这一章一直在反对文字,但要给个公平的边界。文字提示在这些情况下是合理的:
- 按键映射。你没法用关卡设计教「跳跃键是空格」—— 这是纯粹的约定,必须告知。但要在需要的时刻显示,而不是开头一次性列出所有按键。
- 抽象的系统规则。「每回合抽 5 张牌」这种东西很难用关卡教。
- 玩家明确卡住时的补救。如果玩家在同一个地方失败了 8 次,给一个提示是慈悲,不是失败。
正确做法:在玩家第一次需要用某个键的那一刻,在他附近显示那个键。
- 玩家第一次靠近一扇能开的门 → 门旁边浮出一个 [E]
- 玩家第一次遇到需要冲刺的缝隙 → 缝隙旁边浮出 [Shift]
- 之后就不再显示了
这比开头的按键列表有效十倍,因为它出现在信息有用的那一刻,而且是在世界里而不是在弹窗里。
怎么验证你的教学有没有用
唯一的方法:找一个没玩过的人,看着他玩,什么都不说。
这件事的细节很重要,下一章会整章展开。这里只强调一点:
你想开口解释的每一个瞬间,都是一个设计缺陷。 把它们记下来 —— 那就是你的待办清单。
因为你不可能站在每一个玩家旁边。如果需要你解释他才懂,那对其他所有玩家来说,这个设计就是失败的。
情境化提示很容易做成一堆散落的特判。做成一个组件会好得多:
class_name HintTrigger
extends Area2D
@export var hint_text: String = "[Shift]"
@export var hint_id: String = "dash" # 用来记录「已经教过了」
@export var show_once: bool = true
func _ready() -> void:
body_entered.connect(_on_entered)
# 已经学会的就不再提示
if show_once and GameState.learned.has(hint_id):
queue_free()
func _on_entered(body: Node2D) -> void:
if not body.is_in_group("player"):
return
$Label.text = hint_text
$AnimationPlayer.play("fade_in")
func mark_learned() -> void:
# 由实际执行了该动作的地方调用,比如玩家真的冲刺了一次
GameState.learned[hint_id] = true
$AnimationPlayer.play("fade_out")
关键是 mark_learned():提示应该在玩家真的做到之后消失,而不是在计时结束后消失。这样学得快的人立刻不再被打扰,学得慢的人会一直有帮助。
本章小结
- 「告诉」没用:玩家不读、读了记不住、被告知的东西没有成就感。
- 好教学的标志:玩家学会了,但不觉得自己被教了。
- 三条开关:安全实验区(降低犯错代价)、威胁前置(给思考时间)、奖励诱导(改变自愿路径)。
- 玩家的学习速度与失败成本成反比 —— 教学段落的失败成本应趋近于零。
- 金币优于箭头:箭头是指令,金币是动机;金币还不破坏沉浸感。
- 马力欧 1-1 的蘑菇:用地形让玩家躲不开正确的体验,这是关卡设计的最高形态。
- 视觉语言:颜色编码一致、前景背景必须分得开(灰度模糊测试)。
- 文字提示的合理场合:按键映射(要情境化)、抽象系统规则、卡住时的补救。
- 你想开口解释的每一个瞬间,都是一个设计缺陷。
- 卡牌:教学靠受控的初始牌组。前几局给玩家一副简单、意图明确的牌,让机制自己显现。「奖励诱导」的等价物:在早期的三选一里,放一张能明显和已有牌产生连携的卡 —— 玩家会自己发现「组合」这个概念。
- 塔防:第一关的地图形状就是教学。一条只有一个拐角的路,会自然地教会玩家「拐角是好位置」。不需要任何提示。
- 模拟经营:这类游戏最难教(系统多、反馈慢),也是最依赖任务列表的类型 —— 这是少数几个「明确告知」合理的场景。但要做成目标而不是步骤:「让 10 个人吃饱」而不是「点击这里,然后点击那里」。
- 叙事解谜:教学 = 建立谜题的语法。第一个谜题必须简单到不可能失败,它的作用不是挑战,是告诉玩家「这个世界的规则是这样运作的」。《传送门》整个前半段都是在教语法。
- 射击:靠敌人的出场顺序教。第一次遇到某种敌人时,单独出现、距离远、数量少 —— 这就是「威胁前置」的射击版本。