脚本方面
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、半透明物体开销比较大,尽量不要使用