# 普通小游戏运行时优化建议
更新时间 2025-02-25
性能优化是 功能,表现,时间,空间 等方面的权衡
# FPS
FPS(Frames Per Second) 越高,游戏感觉越流畅。如果小于30,那玩家会感觉到卡顿。所以应当争取,在绝大多数机型上,FPS保持在30帧以上。
受到手机的限制,平台的限帧是60。并且提供了限帧接口,如果游戏对画面的流畅度要求并不高,建议限制在30,以保证长时间运行下手机不发热。
# CPU 性能优化
绘制调用(draw call) 次数过多,游戏循环中计算量过大,都会造成 CPU 性能下降,尽量减少游戏中的总绘制调用次数,应该尽可能的使用批量绘制。
一般有以下几种优化方案:
- 合并网格:将多个相同材质的网格合并成一个大的网格,减少渲染调用次数。
- 使用图集:将多个小的纹理合并成一个大的纹理图集,减少纹理切换次数。
- 使用批处理:将多个相同材质的物体放在一个批处理中一起渲染,减少渲染调用次数。
- 使用GPU实例化:使用GPU实例化技术,将多个相同模型的物体实例化渲染,减少渲染调用次数。
- 减少透明物体:透明物体的渲染需要进行混合操作,会增加DrawCall的次数,可以尽量减少透明物体的数量。
- 使用静态批处理:将不会发生变化的物体进行静态批处理,减少渲染调用次数。
# IO操作
当玩家玩游戏时,要尽量避免 IO 操作,尽可能预加载图集、音频、TTF字体等
# 运算优化
- 不要在游戏循环中进行繁重的计算操作,因为这可能造成每帧 60 次的大量计算,性能消耗大。
- 考虑使用worker,利用多线程能力,进行异步计算。
# GPU 性能优化
一般来说, 2D 游戏,没有复杂的着色器,基本不会遇到 GPU 性能问题。但是过度绘制的问题仍然存在,如果过度绘制较多,将会消耗大量带宽,进而降低 GPU 性能。
# 内存优化
- 使用合适的的压缩纹理,参考各引擎的纹理压缩的支持情况
- 及时释放使用不到的资源,内存紧张时,限制资源的预加载
- 在场景切换的时候主动调用tap.triggerGC 主动清理内存
# 其他性能优化建议
- 始终使用批量绘图,将同一图层中的精灵图像打包成一个大的图集
- 为避免加载资源带来的卡顿,考虑资源预加载
- 为避免GC带来的卡顿,对频繁使用的对象,使用对象池
- 使用烘焙光照,而不是动态光照
- 避免使用复杂的像素着色器 参考资料:
COCOS 引擎优化:https://docs.cocos.com/cocos2d-x/manual/zh/advanced_topics/optimizing.html (opens new window)
LAYA 引擎优化:https://layaair.com/3.0/doc/basics/common/Stat/readme.html (opens new window)