Unity性能優化(主要是內存的優化)

Unity手遊的性能優化過程更像是一門時空轉換的藝術, 持續在CPU和內存之間取得一個平衡。空間不足時則需要釋放一些無用數據,以獲得更優的空間使用率;時間太長時就需要降低不必要的函數開銷。以下是騰訊遊戲在Unity遊戲開發過程中內存和性能優化的一系列解決策略和方法。

貼圖:

l 控制貼圖大小,儘量不要超過 1024 x1024

l 儘量使用2n次冪大小的貼圖,否則GfxDriver裏會有2份貼圖;

l 儘量使用壓縮格式減小貼圖大小;

l 若干種貼圖合併技術;

l 去除多餘的alpha通道;

l 不同設備使用不同的紋理貼圖,分層顯示;

模型:

l 儘量控制模型的面數,小於1500會比較合適;

l 不同設備使用不同的模型面數;

l 儘量保持在30根骨骼內;

l 一個網格不要超過3material

動畫:

l N種動畫壓縮方法;

l 儘量減少骨骼數量;

聲音:

l 採用壓縮MP3 wav

資源方面的優化:

l 使用 Resource.Load 方法在需要的時候再讀取資源;

l 各種資源在使用完成後,儘快用Resource.UnloadAssetUnloadUnusedAsset卸載掉;

l 靈活運用AssetBundleLoadUnload方法動態加載資源,避免主要場景內的初始化內存佔用過高;(實現起來真的很難

l 採用www加載了AssetBundle後,要用www.Dispose 及時釋放;

l 在關卡內謹慎使用DontDestroyOnLoad,被標註的資源會常駐內存;

代碼的優化:

l 儘量避免代碼中的任何字符串連接,因爲這會給GC帶來太多垃圾;

l 用簡單的“for”循環代替“foreach”循環;

l 爲所有遊戲內的動態物體使用內存對象池,可以減少系統開銷和內存碎片,複用對象實例,構建自己的內存管理模式,減少InstantiateDestory

l 儘量不使用LINQ命令,因爲它們一般會分配中間緩器,而這很容易生成垃圾內存;

l 將引用本地緩存到元件中會減少每次在一個遊戲對象中使用 “GetComponent” 獲取一個元件引用的需求;

l 減少角色控制器移動命令的調用。移動角色控制器會同步發生,每次調用都會耗損較大的性能;

l 最小化碰撞檢測請求(例如ray castssphere checks),儘量從每次檢查中獲得更多信息;

l AI邏輯通常會生成大量物理查詢,建議讓AI更新循環設置低於圖像更新循環,以減少CPU負荷;

l 要儘量減少Unity回調函數,哪怕是空函數也不要留着;(例如空的UpdateFixedUpdate函數)

l 儘量少使用FindObjectsOfType函數,這個函數非常慢,儘量少用且一定不要在Update裏調用;

l 千萬一定要控制mono堆內存的大小;

轉自:http://blog.csdn.net/wetest_tencent/article/details/51784782

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