1. 程式人生 > >關於AssetBundle的載入與解除安裝

關於AssetBundle的載入與解除安裝

一、如何下載AssetBundle
   1、非快取機制——通過建立一個WWW例項來對AssetBundle檔案進行下載。下載後的AssetBundle檔案將不會進入Unity引擎特定的快取區。
   2、快取機制——通過WWW.LoadFromCacheOrDownload介面來下載AssetBundle檔案。下載後的AssetBundle檔案將自動被存放在Unity引擎特定的快取區內,該方法是Unity推薦的AssetBundle檔案下載方式。(目前,對於釋出到WebPlayer上的網頁遊戲,預設快取大小為50MB;對於釋出到PC上的客戶端遊戲和釋出到iOS/Android上的移動遊戲,預設快取大小為4CB。
二、如何載入AssetBundle

   1、WWW.assetBundle
——可以通過WWW.assetBundle屬性來建立一個AssetBundle檔案的記憶體物件。
   2、AssetBundle.CreateFromFile——通過該介面可以從磁碟檔案建立一個AssetBundle檔案的記憶體物件。需要注意的是,該方法僅支援非壓縮格式的AssetBundle,即在建立AssetBundle時必須使用UncompressedAssetBundle選項。
   3、AssetBundle.CreateFromMemory——通過該介面可以從記憶體資料流建立AssetBundle記憶體物件。例如,當用戶對AssetBundle進行加密時,可以先呼叫解密演算法返回解密後的資料流,然後通過AssetBundle.CreateFromMemory從資料流建立AssetBundle物件。
三、如何從AssetBundle中載入Assets

   1、AssetBundle.Load。
   2、AssetBundle.LoadAsync。
   3、AssetBundle.LoadAll。

四、如何從場景AssetBundle中載入Assets
   1、Application.LoadLevel。
   2、Application.LoadLevelAsync。
   3、Application.LoadLevelAdditive。
   4、Application.LoadLevelAdditiveAsync。
五、AssetBundle記憶體管理

六、如何解除安裝AssetBundle
  1、AssetBundle.Unload介面。

七、如何解除安裝從AssetBundle中載入的Assets
  1、AssetBundle.Unload(true)。
2、Resources.UnloadUnusedAssets()——該介面會解除安裝掉所有沒有使用的Assets。需要強調的是,它的作用範圍不僅是當前的AssetBundle,而是整個系統,而且它也不能解除安裝掉從當前AssetBundle檔案中載入的仍在使用的Assets。

八、如何解除安裝GameObject
   1、對於由CameObject.Instantiate介面例項化出的CameObject,Unity提供了CameObject.Destroy或CameObject.DestroyImmediate介面來將其解除安裝。Unity推薦使用CameObject.Destroy介面,如果使用該介面,Unity會將真正的刪除操作延後到一個臺適的時機統一進行處理,但是會在渲染之前進行。
九、WWW、AssetBundle及Asset的關係
   1、關係圖:
   
   2、如圖所示,WWW物件和通過WWW.assetBundle屬性所載入的AssetBundle物件會對WebStream資料持有引用,同時AssetBundle也會引用到從它所載入的所有Assets。值得一提的是,真正的資料都是存放在WebStream資料中,如紋理、模型等,而WWW和AssetBundle物件只是一個結構指向了Web Stream資料。
   3、對於WWW物件本身,可以使用www = null或WWW.Dispose()來進行解除安裝。二者的效果一樣,只是www =null不會及時引起記憶體釋放操作,而是在系統自動垃圾回收時進行釋放;而
WWW.Dispose()會及時呼叫系統的垃圾回收操作來進行記憶體釋放。WWW物件釋放後,其對於WebStream資料的引用計數也會相應減1。
    4、對於WebStream資料,其所佔用的記憶體會在其引用計數為0時,自動被系統進行釋放。如上圖中,當AssetBundle物件以及WWW物件被釋放後,WebStream資料所佔用的記憶體也會被系統自動回收。