为什么我做了一个不会跳的主角
我砍掉了跳跃键。然后花了三个月,学着把「不能跳」变成一种表达。
《HONEY GARDEN》的主角不会跳。
这不是技术限制。引擎是 Godot,跳跃是它自带模板里的第一行代码。这是我按着删除键,看了很久,然后松手的决定。
一个按键,和一整套语法
2017 年我玩《Everything》的时候第一次意识到:平台游戏里,“跳”不是一个动作,是一整套和世界对话的语法。
能跳,意味着:
- 地面和空中是两种状态,玩家会自动去找“哪里能站”
- 高度差是一种门锁,够不到就是不够
- 关卡设计从“平面迷宫”变成“立体寻路”
- 玩家的大脑会持续计算抛物线,哪怕他不在跳
这四件事全都很好。问题是,它们全都关于移动,而不是关于我想讲的东西。
我想讲的是一座花园,和一个人慢慢学会告别。在这个故事里,主角不需要翻过任何东西。她需要的是蹲下来。
那么,把跳跃换成什么
我删掉跳跃之后,空了整整一个按键。这个洞不能空着——空着的按键会让玩家一直按它,然后怀疑游戏坏了。
于是我给了她“照料”。
按住同一个键,根据面对的东西不同:对着土就播种,对着芽就浇水,对着开花的就摘下,对着人——什么都不做,只是站着。
前三个是机制,最后一个是故意设计的无用操作。
那个无用的按键
游戏里有一个 NPC,是主角的祖母。她大部分时间坐在门廊上。
玩家在她面前按“照料”键,什么都不会发生。没有对话,没有道具,没有成就。只是主角会走过去,在她旁边站一会儿,屏幕上是风声。
测试的时候,80% 的玩家按了一次,没反应,就走了。
但有 20% 的人按了第二次、第三次。有一个人按了十一次。
那一刻我知道这个设计成立了。一个没有反馈的按键,反而成了整个游戏里信息量最大的操作。
没有跳跃,关卡怎么设计
这才是真正的账单。删掉跳跃的那个下午我很爽,接下来的三个月我在还债。
不能跳,意味着垂直方向完全失效。我失去了:
- 用高低差自然引导视线
- 用平台间距控制节奏
- 用“看得到但够不着”制造欲望
前两个月我做出来的关卡,全都平得像一张地图。所有的路都在地面上铺开,玩家走两步就看完了整个区域,然后失去兴趣。
转折点是我开始把垂直还给美术。
玩家不能上去的地方,不代表不能存在。
悬崖、树冠、屋顶、晾衣绳、飞过的鸟——这些东西全都不参与玩法,但它们重新把画面的纵深撑了起来。玩家还是会抬头看,会想“那上面有什么”。答案是:什么都没有。但想看这件事本身,就是沉浸感。
三条替代规则
最后我总结出三条不用跳跃也能撑住关卡的原则:
- 用宽度代替高度。 一条路不够就并排三条,让玩家选。
- 用时间代替距离。 过不去的地方,不是“够不着”,而是“还没到”——花开了,路就出来了。
- 用视线代替路径。 让玩家看见远处,哪怕走不过去。视线本身就是奖励。
第三条最反直觉,但最有用。
# 关卡验证脚本:检查玩家从任意点出发,视野内是否
# 至少有一个"可望不可即"的目标物
func verify_vista(level: Level) -> bool:
for spawn in level.player_spawns:
var visible := level.visible_props_from(spawn, 40.0)
var reachable := level.reachable_from(spawn)
if visible.difference(reachable).is_empty():
push_warning("这个区域没有远景,玩家会觉得世界很小")
return false
return true
这个脚本现在会在我每次保存关卡时跑一遍。它拦下过我大概三十次“世界变小了”的失误。
代价
说点不好听的。
去掉跳跃之后,我的游戏变得不那么“好玩”了。这是真的。它的操作快感下降了,节奏变慢了,前十分钟甚至有点闷。
我用它换来的东西是:玩家会更慢地走,会更仔细地看,会在一个没有用的按键上多按两次。
这笔交易划不划算,等《HONEY GARDEN》发出来才知道。但至少到现在,每次看到有人在祖母面前按第二下,我都觉得值。
下一篇会写我为这个决定付出的技术代价:没有跳跃之后,寻路和碰撞该怎么写。
END OF CARTRIDGE