脚本方面

1、不需要高频率调用的函数,使用InvokeRepeating(或Time.frameCount%n)代替Update

2、SetParent、Instantiate、Find、IO操作、SetActive、GetComponent等耗时较长的接口应在loading的时候做

3、Update尽量减少代码逻辑、减少临时变量、减少对其他函数的调用

4、Dictionary使用TryGet代替ContainsKey

5、用移出屏幕(例如一些UI控件)代替SetActive(false)

6、Transform的子类型过多时避免频繁地进行Transform操作,大量的子物体会带来大量的操作

7、自己用来查错的Log打印尽量不要上传SVN

9、空的Update应该删掉

10、尽量减少物理组件的使用

11、用stringbuilder代替string,减少gc

12、用for循环代替foreach

13、使用对象池

14、尽量使用异步资源加载方式,减少卡顿

15、尽量减少函数中的临时对象的创建,尽可能的把这些对象转化为类的成员,较少gc

16、尽量减少装箱拆箱操作,包括使用装箱拆箱操作的容器,例如ArrayList ,Hashtable,减少gc

17、在不影响游戏体验的时候(例如Loading、设置界面)主动通过System.GC.Collect()调用垃圾回收

设定方面

1、减少drawcall,设置静态批次,将场景中不移动的的地图元素勾选 static选项

2、减少光照,尤其是点光源,降低像素级光源数量,最好不要使用动态光源

3、降低阴影质量及产生阴影距离

5、使用lightmap

6、shader尽量设定为 Mobile下的,这些shader在手机上表现更好

7、关闭纹理资源的“Read & Write”功能





美术方面

1、使用LOD(Level of Detail)

2、合并网格,减少calldraw,尽量少于200

3、剔除场景模型中看不到的面

4、优化模型,做到同屏面数少于10w

5、当某特效有非常多的可能重叠的透明粒子,且有可能近距离观察这个特效的时候(例如近距离观察一个龙卷风特效),可能会造成渲染用时过多,游戏就会比较卡,因为渲染的时候叠加的透明面片会让渲染次数提高很多,可以使用透明的模型代替特效

6、半透明物体开销比较大,尽量不要使用