【吐槽这破游戏】船真是太多了,卡死了!
这是今天某位小伙伴的询问引起的吐槽,不过我觉得可以引申开来讲一讲船造成的性能影响上有哪些坑。
【无法避免的对象堆积】
和人口类似,银河系中的船也会随着游戏进程慢慢增加到一个恐怖的数量。目测游戏后期50%的卡顿和性能拖慢来自庞大的舰队。
这个很好理解,我相信任何有过RTS游戏经验的小伙伴们都对此有着很深刻的体会,尤其那些喜欢拿着地图编辑器玩乱战的。
群星这样的大战略游戏中,游戏内对象或者说物体数量,一定会越来越多,游戏也一定会越来越慢。
【比较要命的几类数据】
舰船的数据刷新是实时的,可能是每刻刷新(1天=10刻),也可能每帧刷新,因为任何修正变化几乎都是立刻就会体现在船上。这种极高的刷新频率也是舰船吃cpu预算大头的原因,尤其是有战斗发生的时候。
那么,哪几类数据对运算的影响极为明显呢,我认为是以下几点:
①射速
射速是个很沙雕的属性。
首先,群星的战斗系统真的有射速,它不只是一个火力数据增幅器。比如一个1天开火一次的武器,如果这艘船获得了射速+200%,那么它一天就会发射3次,也就是3次开火计算。因为1天=10刻,所以理论上射速的极限是每天10次,再快的频率就无法统计了,尽管战力运算还是会把它算进去。
其次是,射速吃循环。于是后期基本上每艘船上的每一门炮都会变成一天射10次的怪物。
最后是,群星中开火会影响到特效,你武器自身开火越快,特效发射频率就越高。但是特效播放频率是恒定的,所以前期一天一道光束,可能在后期就变成1天10道光束,叠加在一块就成了光污染。
所以这就是为什么一战斗敌人秒死,而且一战斗就贼卡,就算把镜头拉到么有战斗的星系依然很卡的原因。因为运算量被射速增幅得太多了。
②光环类配件
光环也是个很沙雕的东西
在3.4之前,这东西是一天检测一次,并且是针对星系内所有船进行一次修正检测。3.4之后,这个东西不但对所有船进行检测,而且还会统计船是否符合某些条件,也就是增加了trigger。最重要的是,这东西从一天一次,变成了每刻或者每帧一次。
想象一下,一个星系内500艘船在交战,而且还有10个光环在刷新修正。然后每一刻都在发生500*10次修正刷新,这是多么恐怖的运算量。
③舰载机
飞机和导弹,其实就是阉割过的船。他们拥有独立的位置和速度,独立的命中检测系统(因为可以被防空攻击)。
而导弹还好,没有自己的武器,命中了或者被打掉就没了。群星的飞机是无限增殖的,也就是只要不被打下来,那么飞机会越来越多。最后这些飞机会形成一个巨大的甜甜甜圈型飞机云,这时候你也会感受到游戏似乎慢下来许多。
④多炮位船体
每一门炮都有自己独立的目标选择,开火和命中计算,这些计算最终都会统计到战斗结果里。想象一下,一个mod给你一艘带有30门炮20个装备插槽的船体,是不是这一艘船的战斗运算量就等于原版一个小舰队的运算量呢?
尽管在各种数据堆叠的mod中,这几乎无法避免。