Unity 熱更--AssetBundle學習筆記 0.8

畅知發表於2024-05-02

AB包的依賴

接上一小結。

在這裡我們新建一個紅色材質球,賦值給Cube預製體。此時不對材質球進行AB包分類,再次進行打包。執行指令碼,發現紅色cube成功的從AB包中載入出來。儘管我們沒有將cube所依賴的材質球進行打包分類,但是打包時候unity會自動將包中的物體相關依賴打入包中【圖三所示】。對於所依賴的資源我們如果不進行打包設定,也可以正常使用。

img

image-20240502143653075

image-20240502144138523

如果還是這個紅色的材質球,需要被其它AB包中的預製體所使用呢?每個AB包裡會預設打入一個材質球顯然有些浪費AB包的空間。

我們可以設定某個公共資源打入到具體的包中,而在載入使用AB包中的資源時候,把此AB包相關依賴的其它AB包也同時載入出來即可滿足使用。也就是說我要載入A資源時候,會檢查A資源依賴的其它資源包(可能是B、C),將ABC同樣載入到記憶體中,這樣在使用A的時候,不會造成資源丟失問題。

img

private void Awake()
  {
      //獲取AB包 打包的檔案已經複製到streamingAssets檔案下 從此位置載入
      //注意!AB包不能重複載入
      ab  = AssetBundle.LoadFromFile(Application.streamingAssetsPath +"/"+"model");
      _image = GameObject.Find("Canvas/Image").GetComponent<Image>();
      //載入主包資源  
      mainAB = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "StandaloneWindows");
      //獲取主包中的儲存的包和包之間的依賴關係
      AssetBundleManifest manifest = mainAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
      //獲取model資源相關的依賴
      string[] dependencies = manifest.GetAllDependencies("model");
      foreach (var dependency in dependencies)
      {
          //載入依賴的ab包
          AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + dependency);
      }
  }

其載入的就是AB主包資源中的mainfest檔案,讀取其中儲存的model包的AB包資源依賴,從而將依賴資源所在的AB包也載入到記憶體中。

img

相關文章