天天看點

Unity3D - 資源管理

    一直沒有總結過Unity的資源管理,都是随用随看文檔。今天有人問起,總結一下,加深對Unity資源管理的了解。主要參考了Unity官方文檔之Resources和AssetBundle。

    Unity有兩種動态加載資源的方式,Resources.Load和AssetBundle。Resources.Load用于加載打進遊戲包内Resources目錄下的資源,AssetBundle用于加載包外自己打的資源包(使用BuildPipeline.BuildAssetBundle),常用于做動态更新。下面結合API具體說明:

加載:

Resources.Load:加載app包内Resources/目錄的一個asset;

Resources.LoadAsync:Resources.Load的異步方法;

Resources.LoadAll:類似Resources.Load,但是用于加載某目錄下所有asset;

Resources.LoadAssetAtPath:加載Asset/目錄下的資源,隻能用于編輯器模式,寫打包工具時可能用到;

---------------------------------------------------------------------------------------------------------------------------------------

AssetBundle.CreateFromFile:從磁盤加載一個AssetBundle,這是加載AssetBundle最快的方式(隻能加載uncompressed的AssetBundle)。Unity 5.x改為LoadFromFile,而且可以加載compressed的;

AssetBundle.CreateFromMemory:從記憶體中建立一個AssetBundle,異步方法。Unity 5.x改為LoadFromMemoryAsync;

AssetBundle.CreateFromMemoryImmediate:AssetBundle.CreateFromMemory的同步方法。Unity 5.x改為LoadFromMemory;

WWW.LoadFromCacheOrDownload:從緩存或網絡上下載下傳後加載AssetBundle,不需擔心裝置空間不足;

AssetBundle.LoadAsset:從AssetBundle中加載一個asset;

AssetBundle.LoadAssetAsync:AssetBundle.LoadAsset的異步方法;

AssetBundle.LoadAllAssets:加載AssetBundle中所有指定類型的asset;

AssetBundle.LoadAllAssetsAsync:AssetBundle.LoadAllAssets的異步方法;

解除安裝:

Resources.UnloadAsset(Object assetToUnload):解除安裝指定的asset,隻能用于從磁盤加載的;如果場景中有此asset的引用,Unity會自動重新加載它;

Resources.UnloadUnusedAssets:解除安裝所有未被引用的asset,可以在畫面切換時調用,或定時調用釋放全局未使用資源;

---------------------------------------------------------------------------------------------------------------------------------------

AssetBundle.Unload(false):解除安裝AssetBundle的壓縮檔案資料(檔案記憶體映像);

AssetBundle.Unload(true):解除安裝AssetBundle檔案記憶體映像,并且釋放所有已加載的asset;如果asset在場景中被引用,會丢失;

---------------------------------------------------------------------------------------------------------------------------------------

Object.Destroy:銷毀一個GameObject、元件或asset;并不是立即銷毀,而是在Update循環之後,渲染之前;

Object.DontDestroyOnLoad:标明一個對象在切換場景時不被銷毀;

GC.Collect:強制垃圾收集器立即回收記憶體,可以根據需要使用,比如切換畫面調用或定時調用;

通過看Unity的這些API說明,可以清晰地了解Unity的動态資源管理了。下面這幅圖描繪的更清晰:

Unity3D - 資源管理

繼續閱讀