【unity優化六】代碼

¥儘量避免每幀處理

   1)方案一:每隔幾幀處理一次

      function Update() { if(Time.frameCount % 5 == 0) { DoSomeThing(); } }

   2)方案二:定時重複處理用InvokeRepeating 函數實現

      function Start() { InvokeRepeating("DoSomeThing", 0.5, 1.0); }

¥優化 Update,FixedUpdate, LateUpdate 等每幀處理的函數,函數裏面的變量儘量在頭部聲明

private var pos: Vector3; function Update(){ pos = transform.position; }

¥可用變量緩存遊戲對象或組件,避免頻繁的FindGameObject()和GetComponent()

¥主動回收垃圾 function Update() { if(Time.frameCount % 50 == 0) { System.GC.Collect(); } }

¥循環語句中,可先保存最大值

   length=myArray.Length;    for(int i=0;i<length;i++)  { }

¥少用foreach,因爲每次foreach爲產生一個enumerator(約16B的內存分配),儘量改爲for.

¥將GameObject上不必要的腳本disable掉,避免每幀做update()操作

¥刪除空的Update方法

¥Lambda表達式,使用不當會產生內存泄漏

¥儘量少用LINQ:1.部分功能無法在某些平臺使用,2.會分配大量GC Allow.

¥控制StartCoroutine的次數:開啓一個Coroutine(協程),至少分配37B的內存。Coroutine類的實例21B,Enumerator -- 16B

¥使用StringBuilder替代字符串直接連接.

¥緩存組件:每次GetComponent均會分配一定的GC Allow;每次Object.name都會分配39B的堆內存.

¥儘量使用固定的內置數組:內置數組是非常快的。ArrayList或Array類很容易使用,但速度不行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章