记 一次U3D大型多人在线网游性能优化经验
就是类似这种网游
-香港明星代言图片
这种老2D网游(十几年前PC端的游戏)现在要把它搬到手机上,因为是纯2D的游戏,采用了大量的图片(动画序列帧),并没有用到
3D的技术,市面上有不少是用Cocos2D引擎开发的,基本上还原一致。
博主所在的项目采用U3D开发,去年Unity版本2019 LTS刚刚发布,开发2D方面完全没有问题。这里略过一些游戏功能开发过程,只说开发了
大半年后游戏基本做出来了,功能完成度70%,然后整体测试了 一下,发现游戏卡顿、掉帧问题明显,于是开始了为期三周的性能优化。
性能优化,博主首先想到的是看SetPass Calls数量,也就是Draw Call (DC) 的数量, 进入游戏后,发现DC超过了300,游戏很卡
-游戏图片
什么是Draw Call# 在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。 这一过程是逐个物体进行的,对于每个物体,不止GPU的渲染,引擎重新设置材质/Shader也是一项非常耗时的操作。 因此每帧的Draw Call次数是一项非常重要的性能指标,对于iOS来说应尽量控制在20次以内,这个值可以在编辑器的Statistic窗口看到。
然后又看了下内存,进游戏后MONO从300MB一直涨到了1.7G,也是很夸张
目前Unity所使用的Mono版本存在一个很严重的问题,即:Mono的堆内存一旦分配,就不会返还给系统。
因为对于游戏(特别是移动游戏)来说,内存的占用可谓是寸土寸金的,让Mono毫无必要地锁住大量的内存,是一件非常浪费的事情