第二天早上,我打开需求单。
上面写着:
优化关卡体验,让玩家感知更真实
我盯着“真实”两个字看了很久。
在这个项目里,真实不是需求。
真实是事故。
昨天我刚发现,项目里有一堆关卡字段。
realLevel。
displayLevel。
payLevel。
fakeLevel。
还有一个 bossExpectedLevel。
正常项目里,关卡是数字。
这个项目里,关卡是立场。
战斗系统认为你在第二关。
界面认为你在第五关。
礼包认为你在第七关。
排行榜认为你在第十一关。
客服后台认为你还没开始玩。
每个系统都有自己的世界观。
并且互不承认。
我问产品:
“你说的真实,是按哪个关卡真实?”
产品愣了一下。
他说:
“就是玩家感觉真实。”
我说:
“那事实呢?”
他说:
“事实不要太刺激用户。”
我第一次听到“事实”还要控制刺激程度。
我去翻关卡逻辑。
很快看到一段代码:
const realLevel = user.level
const showLevel = Math.max(realLevel, fakeLevel, bossExpectedLevel)
我沉默了。
正常项目取最大值,是为了算伤害。
这个项目取最大值,是为了保护玩家自尊。
更绝的是下面还有一行注释:
// 不要让用户意识到自己还在新手期
我看着这行注释,突然有点佩服。
它没有解决新手期。
它解决了意识。
我拉了几个测试账号。
账号 A,界面显示第 7 关,实际在第 2 关。
账号 B,界面显示第 12 关,实际在第 3 关。
账号 C,排行榜第 31 名,客服后台显示未通关新手引导。
我问客服:
“如果账号 C 来问为什么卡关,你们怎么看?”
客服说:
“我们一般说数据正在同步。”
我说:
“但它同步八个月了。”
客服说:
“所以我们说请耐心等待。”
我沉默了。
在这个项目里,客服不是解决问题的人。
客服是现实缓冲层。
我试着把测试环境里的关卡显示统一成真实进度。
结果很炸裂。
玩家从第 7 关变回第 2 关。
礼包从“高阶勇士专属”变成“新手补给”。
排行榜名次直接消失。
任务栏提示“完成第七关领取奖励”,但按钮上写着“请先通关第二关”。
测试看完之后,在群里发了一句:
“这个版本像账号被盗了。”
运营马上说:
“不能这么发,用户会以为我们回档。”
我说:
“可我们只是让它显示真实进度。”
运营说:
“那更不能发。”
我懂了。
用户能接受游戏骗他。
但不能接受游戏突然坦白。
下午开会。
主题叫:
关卡真实感优化方案讨论
听起来很专业。
实际内容是大家讨论:
到底要骗得更少,还是骗得更像。
数据同事说:
“不能动显示关卡,动了漏斗会断。”
运营说:
“不能动礼包关卡,动了付费会掉。”
客服说:
“不能动后台关卡,动了我们没法判断玩家是不是记错。”
产品说:
“那能不能只让玩家觉得我们动了?”
领导听完,点点头:
“这个方向可以。”
我坐在会议室里,突然意识到。
我们不是在优化关卡体验。
我们是在维护一场多人协作的幻觉。
最离谱的是数据后台。
我打开关卡漏斗。
新用户第 1 关通过率正常。
第 2 关几乎没人。
第 3 到第 6 关全是 0。
第 7 关到达率 98%。
这张图不像游戏数据。
像玩家集体瞬移。
我问数据同事:
“这图你们没觉得奇怪吗?”
他说:
“刚开始觉得。”
我问:
“后来呢?”
他说:
“后来老板很喜欢。”
我看着那根从第 1 关直冲第 7 关的曲线。
突然理解了老板为什么觉得项目节奏好。
不是游戏节奏快。
是数据跑得快。
玩家还在新手村,报表已经替他冲进中后期了。
我继续翻代码。
看到一个方法:
getLevelForReport() {
return this.getLevelForBoss()
}
我以为自己看错了。
数据上报关卡,取的是老板视角。
下面还有个兜底:
if (!level) return 7
正常项目兜底是 1。
这个项目兜底是老板验收关。
我终于明白为什么新用户第七关到达率 98%。
不是玩家强。
是兜底强。
我又看了一眼那个文件:
TruthLevelManager
真相关卡管理器。
名字很大。
但项目里没有调用。
像一个证人。
知道真相。
但没人敢让它出庭。
我问前同事:
“为什么这个东西一直没接?”
他说:
“接过一次。”
我问:
“然后呢?”
他说:
“玩家少了一半。”
我说:
“为什么?”
他说:
“因为他们发现自己没那么强。”
这句话听起来像心理咨询。
实际上是线上事故。
后来大家就达成了共识:
真相可以存在。
但不能上线。
晚上领导问我:
“今天这个真实感,有进展吗?”
我说:
“有。”
他说:
“怎么处理?”
我说:
“不能直接真实。”
领导点点头,像是早就知道。
我继续说:
“只能让所有地方看起来没那么矛盾。”
领导很满意:
“对,要平滑。”
我第一次觉得“平滑”这个词很残忍。
它不是让系统更正确。
是让错误更圆润。
最后这个需求的方案很简单。
玩家原来看到第 7 关,现在还看到第 7 关。
礼包原来按第 7 关卖,现在还按第 7 关卖。
数据原来觉得玩家到了第 7 关,现在继续觉得。
客服后台原来显示第 1 关,也继续显示。
唯一变化是:
几个地方不再互相打脸。
任务栏不再说“去打第 2 关”。
结算页不再突然写“欢迎来到第 7 关”。
礼包不再在新手引导里喊“高阶玩家专属”。
大家都很满意。
因为真相没有改变。
只是露馅的地方少了。
测试通过后,产品说:
“这版感觉自然多了。”
运营说:
“数据也没掉。”
客服说:
“玩家应该不会问了。”
领导说:
“你看,真实感这不就做出来了吗?”
我没有说话。
因为我突然意识到,这个项目对“真实”的理解很高级。
不是符合事实。
而是所有谎言互相对齐。
下班前,我又打开了一次远程配置。
本来只是想确认第七关那个字段还在不在。
结果我看到一个新配置:
truthLevel = 999
我愣了一下。
旁边还有注释:
// 老玩家回流活动:让用户感知已接近通关
我看了看项目当前一共 32 关。
又看了看 truthLevel = 999。
突然明白了。
第三集还没结束。
因为这个项目马上要告诉玩家:
你不是在第七关。
你已经快通关了。

