1. 程式人生 > >Unity資源管理(二)

Unity資源管理(二)

之前在前面的Unity資源管理(一)中有講過一些資源管理,現在系統的再補充一些

一、資源讀取方式

1. Resources:支援編輯器模式和釋出模式 ,缺點:Resources資料夾下的任何一點點修改,都會導致Resources包的重打。

2. AssetDatabase :僅支援編輯器模式,缺點:正式釋出版不能用,要用AssetBundle來替換。

3. AssetBundle: 支援編輯器模式和釋出模式,可以根據自己的專案實際情況自定義打包粒度,很好的支援熱更新。開發時別用,定義巨集,編輯器模式下用AssetDatabase。

同時AssetBundle也支援非同步的讀取:

AssetBundleRequest abRequest = null;

abRequest = item.assetBundel.LoadAssetAsync("eg");

yield return abRequest;

if (abRequest.isDone)

{

}

方法,使用一個優先順序的佇列來新增非同步載入的指令。

eg:List<ResourceParam>[] m_Loading = new List<ResourceParam>[(int)Priority.Num];

二、AssetBundle,資源載入和解除安裝

       Unity5可以通過每個資源Inspector底部的AssetBundle下拉來指定該資源要打入哪個包,不指定就是不打包。打包過程只需要BuildPipeline.BuildAssetBundles一句話就行了,Unity5會根據依賴關係自動生成所有的包。每個包還會生成一個manifest檔案,這個檔案描述了包大小、crc驗證、包之間的依賴關係等等,通過這個manifest打包工具在下次打包的時候可以判斷哪些包中的資源有改變,只打包資源改變的包,加快了打包速度。(這些都在上篇文章中提到過)

三、貼圖資源配置

        Unity根據貼圖配置會自動生成最後的貼圖資料。

        實際優化:

        1.不會在程式中訪問的取消其Read/Write Enable屬性,如果開啟這個屬性,會使執行時貼圖大小翻倍,記憶體中會額外儲存一份貼圖資料。同樣,模型沒有頂點動畫也可以將這個屬性關掉。

         2.貼圖不需要A通道的不要講圖片格式設定為RGBA相關格式,設定為RGB節省1/4記憶體,圖片尺寸最大1024*1024。

         3.寫工具將未設定圖集或者圖集設定不正確的圖片找出來,給圖片設定圖集,同一圖集內的圖片格式最好格式相同,否則會被分成不同的group。

         4.查詢重複的貼圖刪除。

         5.prefab上如果帶有Animator並且上面只有一個動畫,則用Animation替換。

         6.mipmap關掉,減少多餘記憶體。在測試中我們也發現開啟Mipmap並沒有帶來多少效能提升,在手遊的場景中,我們的視距非常近,並沒有過多這方面的需求。同時關閉Mipmap我們能節約33%記憶體,這是一個比較不錯的提升。

         7.所有紋理,不透明的使用ETC壓縮格式,透明的使用ETC2壓縮格式。ETC是所有Android都接受的格式,這個格式的壓縮質量較差。但在大部分情況下,很難在手機那麼小的螢幕上看到差異。

       在最優配置下使貼圖大小縮小了大約64倍。

         (持續更新)

四、模型

       角色:高中低,武器:高中低,特效:高中低。模型面數不同,需要的貼圖也不同,高階的可能需要法線貼圖和Diffuse貼圖,中級和低階的只要Diffuse貼圖就可以,用不同的shader實現。

五、音效

        BGM先優化, 壓縮,降低位元率/單聲道/控制時長。

六、視訊

        壓縮

七、資源管理器:

  • 統一Resources和AssetBundles載入
  • 類似的載入介面設計,包括同步與非同步
  • 強引用計數管理,Load與Unload匹配
  • 支援按優先順序載入資源
  • 支援配置系統開銷,非同步載入開銷

八、資源物件池的使用,快取複用。

移動端DC不超過300,

耗電量:GPU效能>CPU效能>記憶體佔用>載入速度

瞬卡:CPU效能>載入速度>記憶體佔用>GPU效能

平均幀數:GPU效能>=CPU效能>載入速度>佔用

參考:https://www.jianshu.com/p/77aa1c492db6