卷 II · 玩CH 04深度 04/24

动词:一款游戏能压成一个词

你想做的那个游戏,如果只能保留一个动作,其他全部删掉,你会留下哪个?这个问题不是脑筋急转弯 —— 它就是你的游戏。马力欧是「跳」,传送门是「开门」,我的世界是「放和挖」。这一章讲清楚:为什么动词是内核,一个动词的深度从哪来,以及那个所有新手都想干的事 —— 加第二个动词 —— 该在什么时候干。

核心动词深度从哪来动词的修饰第二个动词GDScript

名词是包装,动词是游戏

让我们从一个很常见的对话开始。

「你在做什么游戏?」
「一个赛博朋克风格的黑客题材游戏。」
「玩家干什么?」
「……嗯,黑进各种系统,有点像。」
「怎么黑?」
「……」

那个「……」就是问题所在。「赛博朋克」「黑客」都是名词,它们描述了这个游戏是什么。但玩家坐下来之后,手指要做的事是什么?没人知道,包括作者。

而如果答案是「玩家在一个网格上摆放数据包,让它们绕过防火墙流到目标节点」—— 那就有东西了。那是一个动词,你能立刻想象出画面,甚至能想到第一个谜题该怎么设计。

◆ 为什么动词比名词重要

因为玩家的时间几乎全部花在执行动词上

一个 10 小时的游戏里,玩家看剧情可能 40 分钟,看美术是被动接收的,而那个核心动作 —— 他要做几千次到几万次。

做几万次的东西如果不好玩,别的东西再好也救不回来。反过来,如果那个动作本身就爽,玩家能忍受相当难看的画面(问问《我的世界》和《以撒的结合》)。

下面这张表把二十来款游戏压成了一个词。点任意一款,注意看第三行 —— 那个动词是怎么长出整款游戏的

「跳」为什么能撑起四十年

值得单独看一眼马力欧,因为它反直觉。

「跳」听起来是所有动作里最贫瘠的一个 —— 你按一下,人上去,然后下来。能有什么深度?

但看看任天堂在这一个动词上挂了多少东西:

  • 跳是位移:过坑、上台
  • 跳是攻击:踩敌人
  • 跳是交互:顶砖块、顶问号
  • 跳是精度考验:落在移动平台上
  • 跳是资源:在空中你失去了地面控制,所以每次跳都有代价
  • 跳是评分:连续踩敌人分数递增,旗杆越高分越多

一个动词,六种角色。这就是深度的来源 —— 不是动作多,是同一个动作在不同情境下意味着不同的事

深度是怎么来的:同一个动作,不同的最优解

这是本章最重要的一节。

很多人以为深度 = 操作复杂。于是他们加连招、加技能树、加十二个按键。结果做出来的东西不是有深度,是难上手 —— 这两件事经常被搞混。

◆ 深度的定义

一个动作有深度,当且仅当:在不同情境下,这个动作的最优执行方式不同,而且玩家能学会分辨这些情境。

拆开看三个条件:

  1. 有多种执行方式 —— 跳可以跳高、跳远、点一下小跳、按住大跳、在边缘起跳
  2. 不同情境下最优解不同 —— 低矮通道要小跳,长距离要助跑大跳
  3. 玩家能分辨 —— 他看得出「这是低矮通道」,而且看得出自己上次为什么撞头了

缺任何一条,深度就没了。缺第 3 条最常见也最隐蔽:你设计的策略差异存在,但玩家读不出情境,于是在他眼里全是随机的。

反例:一个没有深度的动词

假设你做了一个射击游戏,玩家的动词是「开枪」。你给了他一把枪,伤害固定,射速固定,无限子弹。

这个动词有深度吗?没有。因为不管面对什么敌人、什么距离、什么情况,最优解永远是对着敌人一直按。第 2 个条件不满足。

现在加一样东西 —— 只加一样子弹有限,而且弹匣打空后要换弹 1.5 秒。

看看发生了什么:

  • 该不该打完最后三发?(打完就要在最危险的时候换弹)
  • 该不该提前换弹?(浪费子弹,但换在安全的时候)
  • 面对一群小怪和面对一个大怪,节奏完全不同
  • 「主动换弹」变成了一个需要读情境的技巧

一条规则,把一个没深度的动词变成了有深度的动词。而且你没加任何新按键 —— 玩家要学的东西没有变多,但要想的东西变多了。

◆ 加深度的三个杠杆

当你的核心动词觉得「有点浅」,按顺序试这三个 —— 从最便宜的开始:

  1. 给它加一个代价(资源、冷却、风险、位移)。最便宜,效果最好。上面的换弹就是这个。
  2. 给它加一个修饰维度(力度、方向、时机、蓄力)。中等成本,见下一节。
  3. 给情境加变化(新的地形、新的敌人行为)。最贵,但也是可持续产出关卡的方式。

新手的本能是直接跳到第 4 个:加一个新动词。那通常是最贵、收益最不确定的选择。

动词的修饰:一个动作的多个版本

不加新按键,但让同一个按键产生不同结果 —— 这是性价比最高的深度来源。

还是用跳举例。同一个跳跃键,可以有这么多变体:

修饰维度怎么做到玩家要学的
按键时长松手时砍掉上升速度(可变跳跃高度)点一下=小跳,按住=大跳
助跑速度起跳时保留水平速度要跳远得先跑起来
起跳位置边缘起跳 + 土狼时间踩到最边上再跳能多出半格
空中转向空中加速度小于地面方向要在起跳前就想好
落地时机落地后短暂僵直 or 落地取消连续跳跃的节奏
贴墙状态贴墙时跳变成蹬墙跳墙也是地面

六个维度,一个按键。玩家学会全部六项要花几小时,而这几小时里他一直在感觉自己在变强 —— 这正是你想要的。

⚙ Godot 落地:把动词写成一个函数

一个实践上的小建议,会让你后面省很多事:把核心动词单独写成一个函数,而不是散在 _physics_process 里。

extends CharacterBody2D

const RUN_SPEED  := 112.0
const JUMP_SPEED := 340.0
const GRAVITY    := 1500.0

func _physics_process(delta: float) -> void:
	velocity.y += GRAVITY * delta
	velocity.x = Input.get_axis("move_left", "move_right") * RUN_SPEED

	if Input.is_action_just_pressed("jump") and is_on_floor():
		do_jump()

	move_and_slide()

# 核心动词:单独一个函数,未来所有手感改造都发生在这里
func do_jump() -> void:
	velocity.y = -JUMP_SPEED

现在 do_jump() 里只有一行。但到第 9 章结束时,它会长成十几行 —— 土狼时间、输入缓冲、挤压拉伸、烟尘、震屏全都挂在这里。

提前给动词留一个专属的位置,是让「后面能改」变得可能的第一步。如果这行代码埋在 _physics_process 中间的一个 if 里,你到时候会很痛苦。

第二个动词:什么时候加,代价是什么

你迟早会想加第二个动词。这不是坏事 —— 大多数好游戏有两到三个。问题在于时机

加第二个动词的正确理由

只有一个正确理由:第一个动词已经被榨干了。

意思是:你已经用完了上面那三个杠杆(代价、修饰、情境),关卡设计开始重复,而你确实想不出第一个动词的新用法了。

如果你的第一个动词还没被榨干就加第二个,会发生一件很糟的事:两个都很浅。玩家学会了两个各有两三种用法的动作,而不是一个有十种用法的动作 —— 后者的乐趣要大得多。

✕ 加第二个动词的错误理由
  • 「感觉有点单调」 —— 单调不一定是动词太少,更可能是情境太少。先试试杠杆 3(第 16 章讲关卡节奏)。
  • 「别的游戏都有」 —— 别的游戏可能已经在这个动词上打磨了三年。
  • 「我想到一个很酷的技能」 —— 那就单独记在纸上,留给下一个项目。这是最常见的死法。

加对了会怎样:一次好的爆炸

当第一个动词确实榨干了,加第二个的收益是乘法级的 —— 因为真正产生玩法的不是第二个动词本身,是两个动词的组合

看《蔚蓝》:动词是「跳」和「冲刺」。听起来只是二加一,但实际产生的是:

跳                         基础位移
冲刺                       八方向的短距突进
跳 → 冲刺                  跳到最高点再冲,够到最远的平台
冲刺 → 跳                  贴地冲刺后起跳,超远距离
冲刺 → 撞墙 → 蹬墙跳       墙跳接续
冲刺撞到特定方块 → 冲刺重置 整个关卡设计的支柱
空中冲刺后落地前的那一帧    高手才用得出的「延长冲刺」

两个动词,七种以上的复合用法 —— 而且每一种都需要玩家自己发现,每一次发现都是一次成就感。

◆ 判断第二个动词好不好的唯一标准

它能不能和第一个动词组合出「第三种东西」?

能 → 这是乘法,加。(跳 × 冲刺 = 一堆新东西)

不能,只是并列 → 这是加法,暂时别加。(跳 + 开枪,如果开枪时不能跳、跳时不能开枪,那就是两个独立的游戏塞在一起)

这条判据也解释了为什么很多游戏的技能树很无聊:技能之间只是并列关系,不产生组合。八个互不相干的技能,深度还不如两个能组合的。

怎么找到你游戏的动词

如果你现在还说不清自己游戏的动词,有三个可靠的办法。

办法一:观察你的手

玩一个和你想做的东西相近的游戏,五分钟,然后只回答一个问题:这五分钟里我的手指重复做得最多的是什么?

要具体到物理动作,不是抽象概括。「探索」不算,「按住 W 同时用鼠标转视角」才算。

办法二:删到只剩一个

把你想做的所有玩家行为列出来,然后一个一个删,每删一个问:这个游戏还成立吗?

删到删不动为止 —— 剩下那个就是核心动词。这个练习通常很快,而且结果经常出人意料:你以为核心是战斗,删到最后发现真正不能删的是移动。

办法三:看失败

问:玩家失败时,他是在哪个动作上失败的?

这个问题特别准,因为玩家会在核心动词上失败。马力欧的玩家死于跳,只狼的玩家死于弹反没按准,杀戮尖塔的玩家死于牌打错了。

◆ 反过来用:这是一个诊断工具

如果玩家失败的原因不在你以为的核心动词上,那说明你的设计和你的意图脱节了。

比如:你以为你做的是一个关于战斗的游戏,但测试者全都死于掉进坑里 —— 那么你实际上做的是一个平台游戏,战斗只是装饰。

这时你有两个选择:承认它是平台游戏,把跳跃做好;或者改关卡,让战斗成为真正的挑战。但你不能假装没看见 —— 玩家的死亡数据不会骗人。

回到你的一页纸

上一章你写了一句话玩法。现在把它的动词单独拎出来,问自己三个问题:

  1. 这个动作,做得好和做得差,看得出区别吗?(如果看不出,玩家永远不会有「我变强了」的感觉)
  2. 它在不同情境下,最优做法一样吗?(如果一样,说明它还没有深度 —— 用那三个杠杆去加)
  3. 我能一口气想出这个动词的五种用法吗?(想不出五种,说明还没榨干,别急着加第二个)

第 3 个问题特别值得花半小时。拿张纸,逼自己写满五条 —— 你会发现前三条很容易,第四第五条要想很久。而第四第五条,往往就是你游戏里最有意思的那部分关卡。

本章小结

  • 名词(题材、风格、世界观)是包装,动词才是游戏。玩家一辈子在执行的是动词。
  • 深度 = 同一个动作在不同情境下最优解不同,且玩家能分辨情境。不是操作复杂。
  • 加深度的三个杠杆,按成本从低到高:加代价 → 加修饰维度 → 加情境变化
  • 加第二个动词的唯一正确理由:第一个已经榨干。判据是两者能否组合出第三种东西
  • 写代码时给核心动词留一个专属函数 —— 后面所有手感工作都发生在那里。
⇄ 换个类型

「动词」在别的类型里长什么样:

  • 卡牌:动词是「出牌」。深度不来自牌多,来自同一张牌在不同牌序下价值不同 —— 这就是「情境」在卡牌里的形态。一张「抽两张牌」的牌,在牌库前期和后期价值天差地别。
  • 塔防:动词是「放置」。三个杠杆全都适用:加代价(造价 / 占地)、加修饰(朝向 / 升级路线)、加情境(敌人路线变化)。塔的种类是最后才该加的东西。
  • 肉鸽:动词往往是「选择」(选房间、选道具、选升级)。它的深度完全来自第 2 条 —— 同一个道具在不同构筑里价值不同。如果一个道具永远该拿或永远不该拿,它就是废设计(第 6 章会给你一个真的检测器)。
  • 模拟经营:动词是「分配」(时间、人力、土地)。它天然有深度,因为稀缺自动制造了情境差异。这类游戏的风险在反面:容易深到玩家读不懂。
  • 叙事解谜:动词常常是「观察」和「组合」。最容易犯的错是让动词退化成「把所有东西点一遍」—— 那时深度归零,玩家在做的是穷举而不是推理。