一直沒有總結過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的動態資源管理了。
以下這幅圖描繪的更清晰: