浅谈<追光之旅>的技术难点
追光之旅是一款以躲避作为主要玩法,使用godot开发的手机独立游戏。
设计元素主要包括:玩家操作的角色、大量的可收集的"光"元素、大量会追击玩家的"敌人"。
由于不同设备的硬件性能不一样,这个“大量的”元素在PC和手机端的性能表现也不一样。
PC就算数量再多的元素也可以轻松以60帧的效率运行,但是手机的硬件性能确比PC要差很多。
最直观的帧率对比就是 60帧 vs 7.77帧,手机端以个位数帧率遥遥领先,还好,比2个电竞帧率还多一些,属于比较流畅的表现。
注: 白色圆圈代表"光"元素,黑色圆圈代表"敌人"。
这仅仅只有1000个“光”元素,和500个“敌人”,虽然不至于卡顿,但能获得60帧的效率运行,显然会更好一些。
首先要找到性能问题由什么引起,通过 godot 对手机端进行远程调试, 然后从 调试器 -> 分析器 观测,得出是由于大量的敌人每帧更新自己的状态,导致了CPU运算堵塞。
知道性能瓶颈在哪里以后就好解决了,我们只需要减少每帧运算的量,也就是让大多数的敌人不更新状态,而玩家附近的敌人则持续更新,这样就可以优化掉大多数的非必要运算。
这里我使用 四叉树 数据结构作为优化的手段。
优化原理是使用四叉树保存场景中所有敌人的引用,并且通过四叉树可以快速索引到玩家周围的敌人,并激活玩家附近的敌人更新状态并追逐玩家,而那些已经激活并且远离玩家的敌人,则让它隐藏起来并停止更新,让每帧的敌人更新的量保持在一个稳定的区间。
到这里为止,<追光之旅>的优化方案就做好了,接下来就是见证奇迹的时刻。
wow~