Unity開發實戰探討-資源的加載釋放最佳策略簡要心得

Unity開發實戰探討-資源的加載釋放最佳策略簡要心得

看過我另一篇關於Unity資源釋放隨筆《Unity開發實戰探討-資源的加載釋放最佳策略》若是以爲略微複雜,那麼下面是一些比較簡要的心得體會:緩存

歸納

經常使用資源加載的方法有三種:靜態,Resources內部資源,AssetBundle外部資源網絡

資源釋放的方式 有二種:馬上釋放和統一釋放。函數

靜態

靜態就是資源直接放場景,靜態資源沒法馬上釋放,但場景關閉由引擎統一釋放,開發者沒法干預,因此最爲無腦。對象

但靜態過於死板,除了整個場景生命週期中必須使用的資源外,不建議靜態加載,爲何,消耗時間,佔用內存;好比說,遊戲場景持續使用的背景音樂,那麼靜態的確是最佳選擇;但若是場景的開場要播放一個5M的音樂後面再也不使用,這個資源用靜態就是白白增長了5M音樂的加載時間和浪費了5M內存,得不償失。生命週期

靜態資源的加載策略是: 只加載必要固定的資源,或者極其微小損耗不大的資源。遊戲

釋放策略是:由引擎負責。圖片

Resources內部資源

Resources的資源通常和遊戲一塊兒打包,通常是遊戲內使用的關鍵資源。內存

Resources主要加載一些動態的或者須要靈活處理的資源。加載的辦法是先Reources.Load,而後GameObject.Instantiate,馬上釋放的辦法是Reources.UnloadAsset,統一釋放的辦法是Resources.UnloadUnusedAssets。資源

Resources的主要優勢是使用靈活,缺點是開發複雜;加載的時候注意一個資源只須要Reources.Load一次,管理好Load出來資源的引用,儘可能不要用靜態引用,給釋放製造困難。UnloadUnusedAssets前必須注意釋放全部引用,全部Instantiate出來的對象必須銷燬。開發

Resources的加載釋放策略是: 只加載必須使用的資源,加載之後若是無需重複使用,或者使用頻率很是的低,應該在明確使用完畢之後(如圖片顯示結束,音樂播放完畢)馬上用Reources.UnloadAsset釋放。對於後續仍然會反覆採用的資源,建議在內存中緩存引用,以防止後續加載再也不反覆調用Load函數,場景關閉前釋放緩存,銷燬全部實例化對象,等待Resources.UnloadUnusedAssets統一釋放。UnloadUnusedAssets釋放建議在當前場景徹底銷燬之後,再後續場景中執行最爲穩妥。

AssetBundle外部資源

 AssetBundle資源的機制基本和Resources相似,但能夠獨立打包,支持網絡下載和文件讀取,通常是遊戲中使用的輔助資源。

 AssetBundle機制要比Resources多一步,首先要經過AssetBundle.LoadFromXXX把AssetBundle加載到內存,而後使用AssetBundle.LoadAsset加載資源,最後GameObject.Instantiate爲實例化對象。因此一個完整實例化的 AssetBundle存在三處內存引用,在釋放策略上相對複雜。

 AssetBundle的釋放功能主要經過AssetBundle.Unload,並且也可使用Reources.UnloadAsset和Resources.UnloadUnusedAssets進行釋放。

 AssetBundle的加載釋放策略分兩種狀況:

加載完畢之後再也不須要使用的資源包,能夠再加載完畢之後馬上調用AssetBundle.Unload(false)釋放資源包內存,而在此基礎上,對於AssetBundle.LoadAsset之後並再也不使用的資源,能夠經過Reources.UnloadAsset釋放,如需持續使用,也可能等待Resources.UnloadUnusedAssets後續統一釋放。

加載完畢之後仍需持續使用的資源包,則必須保留AssetBundle引用,這種方式下,比較建議的方式是在場景徹底銷燬之後,一次性調用AssetBundle.Unload(true)徹底釋放改資源包和其全部加載資源。

相關文章
相關標籤/搜索