1. 程式人生 > 其它 >Unity之熱更新:(一)AssetBundle

Unity之熱更新:(一)AssetBundle

1. AB包是什麼? 資源壓縮檔案,包含了serialized file(序列化檔案)和resource file(原始檔:二進位制資源(圖片、聲音)被單獨儲存)

2. AB包有什麼作用?減少包體大小,比Resources靈活;

3. AB包資源打包:

  1)Unity編輯器,自定義打包工具

  2)官方提供打包工具:Asset Bundle Browser

4. AB打包流程:

  1)指定資源的AssetBundle屬性

  2)構建AssetBundle包

  3)上傳AB包

  4)載入AB包

5. 打包分組策略:

  1)邏輯實體分組:一個UI介面一個包、一個角色一個包、場景共享部分一個包

  2)型別分組:聲音資源一個包、shader一個包、模型一個包、材質一個包

  3)使用分組:一個關卡一個包、一個場景一個包

  依賴打包:共享資源單獨打一個包(否則每個使用該資源的物體都會打包一個該資源,會佔用更多空間。

  比如兩個物體都用了同一個材質,如果把兩個物體打包,則會生成 (物體A+材質)+(物體B+材質),若把共享材質打一個包,

  再把兩物體打包,則會生成 共享材質+物體A+物體B)

6. 例項演示

  1)指定資源的AssetBundle屬性  

  

  2)構建AssetBundle包

1     //把打包方法設定為選單元件 
2     [MenuItem("Assets/Build AssetBundles
")] //MenuItem屬性允許把自定義靜態函式當做選單命令新增到主選單和檢視面板 3 static void Build_AssetBundles() 4 { 5 BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64); 6 }
//第一個引數:打包路徑;第二個引數:打包設定;第三個引數:打包目標平臺

第二個引數BuildAssetBundleOptions

  • None:LZMA演算法壓縮,壓縮包的最小,但載入時間長(解壓)。
  • UncompressedAssetBundle:不壓縮,包大,載入快
  • ChunkBasedCompression:LZ4壓縮,壓縮率<LZMA,但是可以載入指定資源而不用解壓全部(載入速度接近不壓縮,且包更小) 

StreamingAssets資料夾詳解參考https://blog.csdn.net/iningwei/article/details/89097130

注意設定選單元件指令碼要放在Editor資料夾下才有效

打包之前要先把打包資料夾建好

可以讓資源按資料夾分類打包

打包出來的mainfest檔案是什麼?我們可以用記事本開啟該檔案Assets:聲明瞭包含的Object及路徑,Dependencies:聲明瞭依賴的檔案

  4)載入本地AB包

  a.載入單個資源

AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/prefabs/001.unity3d");
GameObject myPrefab = ab.LoadAsset<GameObject>("Cube");  //注意這裡傳入的名稱是打包前單個物體的名稱
Instantiate(myPrefab);

  b.載入多個資源

AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/prefabs/001.unity3d");
Object[] myPrefabs = ab.LoadAllAssets();  //取出001包裡 Sphere Cube Ground三個物體
foreach (var v in myPrefabs)
{
    Instantiate(v);  //把資源例項化
}

其他載入方式與上傳方式,見siki學院視訊https://www.bilibili.com/video/BV1Yb4y1U7nt?p=17