速度上限的,无论玩家怎样改装赛车,都不可能超过这个速度上限。」
「为什么不可能超过上限呢?难道玩家没有某种手段绕过这个限制吗?」
「不可能绕过的,因为这个速度上限并不是我们为了防止玩家刷BUG设置的,而是我们游戏的底层机制决定的。因为赛车在我们游戏里运动需要不断地改变位置,而我们游戏里面物体改变位置的最小单位和最小时间单位都是确定的,所以从理论上就会有一个最大速度,玩家无论用什么办法都不可能让赛车超过这个速度。因为这个速度就是我们游戏能保证赛车连续运动的极限,再快,赛车在玩家眼里就会出现瞬移了,这种现象从我们的底层算法上就是无法出现的,我们的赛车在程序空间中,只能一格一格的移动,不能跳格!」
你听完,觉得研发经理说得很有道理,于是就非常疑惑地问运营经理:「那么我们的玩家是怎么做到的呢?」
运营经理说:「我也不太懂这个原理,但是我能把玩家的操作重现给你们看。」
于是运营经理进入游戏,选择赛道开始比赛。只见运营经理在赛道上找到一个合适的位置,飞快地把车撞进了路边的一个崖壁,经理试了几次后成功了。某一次几乎是一瞬间,车没有被崖壁正常地弹回去,而是从另外一边的崖壁被飞快地弹了出来,这个穿越过程似乎没有花费任何时间,于是经理就重现出了玩家的变态成绩。
办公室里一阵寂静,你和研发经理两人面面相觑。
研发经理毕竟是211毕业的高材生,他想了一会就恍然大悟道:「原来是这样,我实在没有想到会出现这种情况,这其实是赛道旁边的崖壁太薄了造成的。」
「崖壁太薄为什么造成这个BUG?」你一脸的疑惑。
「是这样的」,研发经理已经完全理解了问题所在:「我们游戏里面的碰撞检测是有时间间隔的,程序会每隔一会检测赛车模型的中心和各种阻挡物之间的距离关系,一旦距离小于某个值就会视作发生碰撞,将车弹回去。但是这个崖壁阻挡太薄了,玩家的车速高到某个程度的时候,撞进来又正好在两次检测的空隙之间的时候,车的中心就穿过了这个崖壁才被检测到碰撞,但是因为模型已经越过了崖壁,于是碰撞程序就把车移到了另一边,所以赛车就穿墙而过了。这个移动是碰撞算法造成的,和正常的移动不一样,所以没有受最小移动距离的限制,所以就超过了游戏的最高车速。」
「碰撞算法有这么高的能力,能帮助赛车超过游戏的最高运动速度?」
「是的,游戏设置最高运动速度的底层原因是因为物体不能在空间中超过最小单位作跳跃,否则就会出现瞬移,如果有瞬移现象,那么就可能出现两个物体同时瞬移到同一个位置的可能。所以要求物体连续运动的本质上也是避免不同物体会同时出现在同一个最小空间单位里。但是,碰撞算法的底层原因也是为了避免不同的物体同时出现在同一个空间里,所以,游戏存在最高速度其实并不是原因或者目的,而是只是现象,更本质底层机制的其实避免不同物体的空间重叠,所以一旦出现这种空间重叠,这时候弹出物体几乎是不需要所谓速度的,系统会以最快的节奏把模型瞬移出去。当然,也不是完全无时间消耗的瞬移,重新绘制物体还是要花费一点时间的,但这也远超最高速度了。
「哦」,你和运营经理总算弄明白了这个BUG的底层原因,于是你又问道:「那我们要怎样避免玩家再利用这个BUG呢?」
研发经理想了一下说:「很简单,把墙加厚点就行了。」
运营经理有点质疑:「这好像没有从本质上解决问题吧?」
研发经理耸耸肩:「这就是最省事的办法了,如果你觉得要从底层来彻底解决这个问题的话,首先我觉得没必要,因为减小检测间隔会极大的增加系统的负担,需要买更强大更贵的服务器,而且绝大多数情况下对玩家体验也不带来什么明显改善。其次,修改底层算法风险很大,搞不好会把整个游戏搞宕机,老板你看呢?」
「去让关卡策划和美术把崖壁改厚点,顺便检查下还有没有其他赛道需要修改。」你感觉作为老板,决策起来一点难度都没有。
在结束会议之前,你有点不放心,又问了下研发经理:「你确定崖壁改厚了,就不会再出现这个BUG了吧。」
研发经理一看就是一个很严谨的人,他斟酌了一会说:「理论上,还是有穿过的几率,因为我们的检测时间也有随机性,只要玩家尝试的次数足够多,再厚的阻挡也有穿过的概率,只是这个概率极小极小。」
「好吧,那就这样吧」,你作为老板深刻地理解不要为极小概率的事情去发愁的简单道理,这种问题,留给知友们去操心就好了。
虽然上面的场景对话是我虚拟出来的情节,但是大家应该明白这段对话指的是什么意思。
从上面程序员和老板的对话中,其实我们得到了一个非常惊人地看待宇宙基础规律的视角,比如我们可以不把光速是当前时空速度上限当作是一种最底层的初始规