一、程序方面
1、尽量少new对象,减少GC的次数,可以使用对象池技术。
2、使用UGUI时,不要通过界面的z轴来做界面排序,这貌似会导致UGUI的批处理失效。
3、尽量少使用GetComponent(),频繁调用的可以用一个变量在开始时把component存起来。
4、不使用OnGui()
5、尽量少实例化游戏对象,同1,可使用对象池技术。
6、要构建字符串时,尽量使用StringBuilder代替string的默认相加操作,减少产生临时字符串。
7、将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉。
二、渲染方面
1、尽量使用光照贴图,可以节省cpu性能,因为实时光照要一直计算,很耗费cpu性能。
2、尽量不使用mesh collider,因为mesh collider相比普通的collider包含大量顶点,计算量很大。
3、把多张小图打包成一张图集,减少draw call调用。
4、尽量使用共享材质,这样的话无论如何修改材质的属性,内存中都只会占用一份,但如果使用普通的材质,每次改动材质属性Unity都会new一个新的材质出来,并在这个材质上修改。这些材质会一直占用着内存,直到调用Resources.UnloadUnusedAssets()的时候才释放,会导致内存 泄露。
5、尽量少使用逐像素光,因为像素数远比顶点数要多,会很耗费性能。
6、使用LOD(level of detail, 多层次细节),它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。缺点是增加了内存。
7、使用Mipmap,类似LOD,但是不同的是,LOD针对的是模型资源,而Mipmap针对的纹理贴图资源。使用Mipmap后,贴图会根据摄像机距离的远近,选择使用不同精度的贴图。缺点:会占用内存,因为mipmap会根据摄像机远近不同而生成对应的八个贴图,所以必然占内存!优点:会优化显存带宽,用来减少渲染,因为可以根据实际情况,会选择适合的贴图来渲染,距离摄像机越远,显示的贴图像素越低,反之,像素越高!
8、使用shader。
9、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小。
10、尽量少使用阴影,静态物体可以通过使用阴影贴图来减少阴影计算量。
11、特效上少发射点粒子。(啥时候有时间或许可以自己试下写个粒子系统)
三、UI方面
1、因为一个canvas里的的内容会合并成一个mesh一起绘制,而当canvas里的内容发生改变时会引起redraw(重绘),所以如果一个canvas里的内容过于复杂时,重绘花费的代价会很大,所以最好把一个复杂的canvas拆分成多个子canvas,这样当某块内容发生变化的时候,只会重绘发生变化的canvas而不会重绘所有canvas。同时又不能划分过多的canvas,因为这样的话drawcall会上升。所以最好把握好一个度。
2、在1的基础上,把需要经常改变的canvas内容和不需要经常改变的canvas内容分离开来,比如一个界面的公告很少改变,而游戏的摇杆部分会经常因为玩家的操作而需要重新绘制,所以可以把公告作为静态canvas内容,把摇杆作为动态canvas内容分离开来。
3、把一个canvas里用到的资源放到一个图集里。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删