《方舟》虽然是个垃圾游戏,但却搭载着当下游戏界流行的‘最真实’型物理引擎。
正如名字所反映的,这个物理引擎的模拟效果非常接近现实世界,物体材质和碰撞、摩擦、变形等状态的判定点多,感应灵敏且高效。
不过,物理引擎本身再完善,实际性能也还是会受到总系统影响。因为诺亚的工作效率过低,之前《方舟》的物理引擎时常会短暂掉线。
要知道,游戏里的人物能站在地面上,是因为物理引擎持续判定人物模型和地表之间存在碰撞。物理引擎掉线,碰撞判定失效,人也就理所当然地顺应重力掉进地底下去了;等物理引擎再恢复工作,人物模型就会彻底卡死在地下——这便是没少受玩家们吐槽的穿模卡地bug。
好在多了歌斐之后,这种情况得到了极大的改善,终于更像‘最真实’而非‘选择性最真实’的物理引擎了。
但是,一些本就不是bug造成的问题,依然没能得到解决。
——比如npc的移动和复位。
《方舟》的游戏世界里有许许多多各种各样的npc,他们各司其职,兢兢业业,24小时坚守在自己的岗位上,为玩家们提供所需的服务。
为了方便玩家(更可能是经费不足所以没有设计专门的移动路径),绝大多数功能性npc都是不会自行走动的。如果因外力被迫离开设定好的站位,npc会自动选择最短的路径走回去复位。
这本来是为了自动寻路的速度和易实现性考虑而制定的规则,但弊端也很明显:只要路径上有障碍物,npc就会被卡住。
情景还原一下——
npc不知道为什么离开了他的岗位,定位判断他的当前位置与设定好的坐标不符,启动复位程序;复位程序根据两点之间线段最短的原则规划好路径,npc照指示移动;途中碰上障碍物,产生碰撞判定,物理引擎判断npc的人物模型不能通过,把他挡住。复位程序只管往前走,物理引擎只管坚持拦,两相作用,就会产生npc一直迈步往障碍物上撞的诡异场景。
歌斐顺着那个拥有长长标题的帖子的指示到了山区之国的主城打铁区,第一眼就看见了当事npc。
npc设定是山区之国技术最好的铁匠,兼任可供玩家学习的生活技能[锻造]的导师。他是熊族男性,身材魁梧,胳膊粗壮,长着一脸粗犷的络腮胡子。
他的名字叫张三。
至于为什么一个背景设定是西幻世界的游戏里的npc会叫张三,那就得问[采集]导师李四、[烹饪]导师王五、[制药]导师赵六……了。
此时张三不知为何跑到了导师专属的豪华铁匠铺外面,正在努力地往自己应该站的位置跑。但他的铁匠铺外面有一根挂着写了【锻造】二字旗帜的旗杆,恰巧在他移动的路径上。他空长了偌大的块头,偏偏拿一根还不到小手指粗细的小旗杆毫无办法,只能头抵着旗杆拼命原地踏步。
游戏里的npc智能程度都很低,同一时间只能处理一件事。张三现在一心只想回到岗位,在如愿以偿之前,他不会响应任何玩家的互动。
铁匠铺旁边有名玩家想找张三交任务。他站在张三跟前喊了半天,一直没得到回应,心头火起,转过身指着空气无能狂怒起来:“我就是去吃个饭,不到五分钟的工夫,导师怎么又跑到外面来了!究竟是谁总闲着没事折腾他?!你出来!我保证不打死你!!”
显然,这就是那个发帖控诉的生活玩家楼主。
在此之前,歌斐已经提前跟诺亚请教过了这种情况的处理方式,胸有成竹,丝毫不慌。
他调用npc系统的刷新程序(这一般是某个npc死亡或消失后才会启用的功能),让张三直接刷新回原位。
生活玩家平均一天五次打电话投诉让官方修复卡位的导师npc,见状也没有多奇怪,很快从善如流地住了嘴,回身跟张三对话,交付已做完的任务,再接取新的打铁日常。
日常任务要求他离开主城去山里的矿场采矿,他虽然恨不得搬把小马扎守在导师跟前、把那个总跟他过不去的罪魁祸首揪出来暴打一顿,但任务不能不做。
他千般不愿万般不舍,一步三回头地离开了。
生活玩家走后不久,又有名玩家匆匆忙忙跑来找张三。
一个网游当中,生活玩家总归是少数群体。相比起日复一日辛辛苦苦地做枯燥的任务环提升生活技能等级,更多玩家会选择花钱买安逸。
新来的这个玩家就是专程来强化防具的。
《方舟》没什么钱做特效,强化武器的动画十分简陋。只见张三把玩家送来的胸甲和强化所需的材料一起放在铁砧上,抡起手上的大铁锤砸下去,“锵”的一声,道具和胸甲融为一体,强化便完成了。
玩家换上新强化的胸甲,低头看了看,似乎十分满意。
接着,他退后几步,瞄准张三,使出了狂战士的专属技能[冲撞]。
[冲撞]是个控制技能,没有伤害——主城里的守卫不会因为他蓄意攻击友善npc赶过来抓他——只能起到强制击退的作用。
这玩家显然不是第一次这么干了,技能释放的角度找得刚刚好,张三被他撞得连退几步,堪堪从铁砧旁边只够一人通行的狭小空隙错身而过,到了店外。
复位程序启动,张三开始脑磕旗杆走太空步,玩家则心满意足地跑掉了。
歌斐无语了两秒,尽职尽责地担起修复bug的责任,把张三刷新回去。
然而很快,他发现,把张三卡在铁匠铺外面似乎是山区之国主城打铁区的一项例行娱乐活动。
几乎所有来找张三的玩家,不论是来买卖装备、修理装备还是强化装备的,在做完自己要做的事情后,都会想尽办法把张三‘请’离岗位。
山区之国有三种专属职业,分别是由盗贼转职的刺客、由斧术师转职的狂战士和重甲兵。为了把张三弄到铁匠铺外面,三大职业简直是各显神通,狂战士用[冲撞]、重甲兵用[野蛮头槌]、刺客用[吸引]……总之无所不用其极,把有求于人、求完就翻脸不认人的渣作风展现得淋漓尽致。
也不知道这种恶意制造bug破坏他人游戏体验的行为究竟有哪里有趣。大概、也许、可能……他们只是吃饱了撑得慌吧。
生活玩家气炸了,歌斐气笑了。
像张三这样的npc卡位不是什么难解决的bug,但总系统总不能一天到晚啥都不干,就光顾着四处刷新卡bug的npc吧?
歌斐扭脸就去找了王总工:“老王,这事你能不能想想办法?”
王总工动作很麻利,不到半个小时就照着歌斐的意思编了个自动刷新功能出来。
其实也不复杂,就是隔一定的时间调用一次npc系统的刷新程序,让不在正确位置上的npc们利用刷新瞬移回到原位,从根源上避免npc被物理引擎的碰撞判定卡死。
歌斐试着应用了一下,很快又发现了问题——这个功能需要占用太多的系统资源了。
包括城镇守卫和一句话都不会说的装饰性看板娘,《方舟》的世界内统共有数百个npc,每次调用自动刷新功能,npc系统就得把名下所有npc查询一遍,再挨个运行刷新程序。在这过程中,游戏运行明显会卡顿,所有底层功能都可能受影响。
这也是没办法的事:刷新的原理是清除掉已有模型的数据、再在固定的位置上原样生成一个新模型,涉及到大批量的建模运算,哪怕是最好的qpu也很难完美带动。
无奈,歌斐只好放弃。
王总工在这时提出了新的解题思路:“我有没有告诉过你,只要总系统足够智能,就可以与npc共享逻辑思维能力?”