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