一、程序方面 01、务必删除脚本中为空或不需要的默认方法; 02、只在一个脚本中使用OnGUI方法; 03、避免在OnGUI中对变量、方法进行更新、赋值,输出变量建议在Update内; 04、同一脚本中频繁使用的变量建议声明其为全局变量,脚本之间频繁调用的变量或方法建议声明为全局静态变量或方法; 05、不要去频繁获取组件,将其声明为全局变量; 06、数组、集合类元素优先使用Array,其次是List; 07、脚本在不使用时脚本禁用之,需要时再启用; 08、可以使用Ray来代替OnMouseXXX类方法; 09、需要隐藏/显示或实例化来回切换的对象,尽量不要使用SetActiveRecursively或active,而使用将对象远远移出相机范围和移回原位的做法; 10、尽量少用模运算和除法运算,比如a/5f,一定要写成a*0.2f。 11、对于不经常调用或更改的变量或方法建议使用Coroutines & Yield; 12、尽量直接声明脚本变量,而不使用GetComponent来获取脚本; iPhone 13、尽量使用整数数字,因为iPhone的浮点数计算能力很差; 14、不要使用原生的GUI方法; 15、不要实例化(Instantiate)对象,事先建好对象池,并使用Translate“生成”对象;
15. StackTraceUtility.PostprocessStacktrace()和StackTraceUtility.ExtractStackTrace(): 1.一般是由Debug.Log或类似API造成. 2.游戏发布后需将Debug API进行屏蔽.
16. GarbageCollectAssetsProfile: 1.引擎在执行UnloadUnusedAssets操作(该操作是比较耗时的,建议在切场景的时候进行). 2.尽可能地避免使用Unity内建GUI,避免GUI.Repaint过渡GC Allow. 3.if(other.tag == GearParent.MogoPlayerTag)改为other.CompareTag(GearParent.MogoPlayerTag).因为other.tag为产生180B的GC Allow. 17. 少用foreach,因为每次foreach为产生一个enumerator(约16B的内存分配),尽量改为for. 18. Lambda表达式,使用不当会产生内存泄漏. 19. 尽量少用LINQ: 1.部分功能无法在某些平台使用. 2.会分配大量GC Allow. 20. 控制StartCoroutine的次数: 1.开启一个Coroutine(协程),至少分配37B的内存. 2.Coroutine类的实例 — 21B. 3.Enumerator — 16B. 21. 使用StringBuilder替代字符串直接连接. 22. 缓存组件: 1.每次GetComponent均会分配一定的GC Allow.