Unity性能優化方案之 內存篇

總體來說,內存的優化在於貼圖和網格

assetbundle採用unity5自帶的,減少每一份的內存

合併貼圖TexturePacking,共用材質球   ,拆分貼圖png採用etc

手動合併網格或者自帶合併網格

 

 


總結

資源內存佔用:
一、紋理
(1) 紋理格式 使用ETC1代替RGBA32,佔用內存變低,ETC1不支持alpha,所以把圖片拆成2個
(2) 紋理尺寸 越低越好 不超過1024*1024
(3) 關閉mipmap
(4) 關閉 圖片讀寫操作 Read & Write
(5) 儘量使用2的n次冪大小的貼圖,否則GfxDriver裏會有2份貼圖;

二、網格
(1) Normal、Color和Tangent,注意裏面的屬性,如果100個裏面有99個沒有color屬性,1個有color會導致所有都會加上color屬

(2)儘量控制模型的面數,小於1500會比較合適;
(3)不同設備使用不同的模型面數;
(4)儘量保持在30根骨骼內;
(5)一個網格不要超過3個material;
 
引擎模塊自身佔用:
 保證assetbundle被清乾淨

託管堆內存佔用:
 高頻率地 New Class/Container/Array
 Log輸出

代碼優化:
 儘量避免代碼中的任何字符串連接,因爲這會給GC帶來太多垃圾;
 用簡單的“for”循環代替“foreach”循環;
 爲所有遊戲內的動態物體使用內存對象池,可以減少系統開銷和內存碎片,複用對象實例,構建自己的內存管理模式,減少
Instantiate和Destory;
 儘量不使用LINQ命令,因爲它們一般會分配中間緩器,而這很容易生成垃圾內存;
  將引用本地緩存到元件中會減少每次在一個遊戲對象中使用 “GetComponent” 獲取一個元件引用的需求;
 減少角色控制器移動命令的調用。移動角色控制器會同步發生,每次調用都會耗損較大的性能;
 最小化碰撞檢測請求(例如ray casts和sphere checks),儘量從每次檢查中獲得更多信息;
 AI邏輯通常會生成大量物理查詢,建議讓AI更新循環設置低於圖像更新循環,以減少CPU負荷;
 要儘量減少Unity回調函數,哪怕是空函數也不要留着;(例如空的Update、FixedUpdate函數)
 儘量少使用FindObjectsOfType函數,這個函數非常慢,儘量少用且一定不要在Update裏調用;
 千萬一定要控制mono堆內存的大小;

 

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章