n
代码还在跑,赵承远的手指已经不听使唤了。
他把“publicclassFecesPhysics:MonoBehaviour”这行字敲下去没多久,屏幕就红了。编译失败,报错堆栈拉出三屏长,全是底层耦合问题。他盯着那串红色字符看了十秒,忽然笑了一声:“好家伙,我刚想玩屎,屎先糊我脸上了。”
他没动,也没骂人。只是把眼镜摘下来擦了擦,又重新戴上,像是在给自己一个重启的信号。
然后他点开版本控制系统,右键当前分支,选了“回滚至v2。8。3——稳定内测版”。光标悬在确认按钮上停了两秒,按了下去。
新功能暂停。排泄系统、沼气陷阱、响屁连环爆,全他妈往后排。现在要做的,是把这辆快散架的车,从悬崖边拖回来。
他调出BUG清单,一共173条,红色标记占了三分之二。第一条就是“角色跳跃落地时地表塌陷异常,偶发穿模至地下三千米”。第十八条写着“车辆行驶中引擎突然变成烤红薯”。最离谱的是第67条:“NPC对话过程中头颅自动旋转360度,疑似引用了隔壁恐怖游戏的动画资源”。
这些毛病,早该修了。上一章他还热血上头,觉得玩家敢提,他就敢做。可现实是,你连基本物理都不稳,谈什么放屁点火?
他深吸一口气,把桌子上的泡面盒推到一边。空的,底儿还粘着两根干瘪的面条。窗外天早就黑透了,楼对面的住户陆续关灯,只剩下一两家还亮着,像困得睁不开的眼。
他从抽屉里翻出一沓贴纸,红黄蓝绿四种颜色,分别代表碰撞、重力、刚体、渲染四大模块。每修完一个BUG,就在对应颜色的纸上写编号,贴墙上。墙很快花里胡哨起来,像小孩过年的涂鸦墙。
第一个通宵是在无声中熬过去的。凌晨三点,他发现刚修复的“建筑倒塌延迟”问题,在加入风力模拟后又崩了。他砸了鼠标,又默默捡起来,拆开后盖吹了吹灰,装回去继续改。
手指开始抽筋,尤其是无名指和小指,敲空格键的时候总打滑。他干脆把键盘垫高,手腕架在一本《游戏引擎架构》上,书皮早磨没了,只剩个硬壳子。
饿是后来才感觉到的。早上七点,他正调试“钢筋混凝土破碎粒子效果”,肚子突然“咕”一声,响得他自己都吓一跳。他看了眼手机,老周发了条微信:“包子放门口了,趁热吃。”
他拉开门,地上真有个塑料袋,摸着还有点温。三个素菜包,一个肉的。他拎回来,坐回椅子,咬了一口。肉包冷了,油凝成一块,嚼着像橡皮。他没停下,一边啃一边盯着编译进度条,嘴里还念叨:“弹性系数……0。35……摩擦力补偿……加0。1……”
包子掰成小块,摆在显示器边沿,像战术补给站。每次跑测试脚本,他就顺手抓一块塞嘴里,机械性咀嚼,不尝味,也不算吃了几口。
第二天中午,他把“刚体动力学”模块单独拎出来,新建了个测试场景。只有一块砖,从十米高空落下,砸在斜坡上。他反复跑了八十七次,直到砖块每次弹起的角度误差不超过0。5度。
他给自己记了一笔:刚体模块,完成度82%。墙上蓝贴纸多了二十张。
第三天凌晨,他卡在第172个BUG上。问题出在“多物体连锁反应”的判定逻辑,一旦超过五个实体同时交互,系统就会乱序计算,导致一栋楼先塌顶再塌地基,活像个倒放视频。
他试了三种算法,全崩。第四种用了递归延迟处理,跑通了第一次,第二次直接让编辑器闪退,未保存的数据全丢。
他坐在那儿,盯着黑下去的屏幕,足足五分钟没动。手指搭在键盘上,指尖发麻。眼睛酸得厉害,看东西有重影,一行代码能看成两行,中间还飘着雪花点。
他拿湿毛巾擦了把脸,水滴顺着下巴掉在裤子上。重新开机,载入备份,从头再来。
最后一次提交前,他加了个日志输出函数,每帧打印一次计算队列状态。跑测试时,他盯着控制台疯狂滚动的字符,突然发现第48帧有个不该出现的负值。
他顺着查进去,定位到一个被遗忘的浮点数除零操作。改完,打包,运行。
这一次,十栋废墟大楼依次倒塌,烟尘按照风向飘散,碎块撞击地面发出不同频率的闷响。压力测试脚本跑完,屏幕上跳出一行绿色提示:
【物理引擎稳定率99。7%】
他愣住了。
手指悬在鼠标上,没去点下一个任务。呼吸变轻了,像是怕惊走这个数字。
他重启程序,再跑一遍。99。7%。
第三次,还是99。7%。
他靠进椅背,缓缓呼出一口气,整个人像被抽了骨头。眼皮沉得抬不起来,但他不敢闭。他知道,只要一合眼,可能就得睡上两天。