前文已經(jīng)介紹了什么是AssetBundle并且對設置AB有了一定的了解玲献。接下來,我們通過實例來了解設置AB名,打包AB,測試AB的方法棵譬。這里我們用到AssetBundleBrowser來快速組建AB資源。
運用
你能學到什么预伺?
- AssetBundleBrowser組織bundle資源
- 加載AB
- 分包策略
使用AssetBundle Browser組織AB結構
與上文不同订咸,這里我們選擇插件來提供一個可視化的AB組織方式。這也是unity官方推薦的一種方式酬诀。
首先脏嚷,右鍵資源列表中右鍵創(chuàng)建新bundle。當然也可以先創(chuàng)建一個文件夾再創(chuàng)建一個bundle瞒御,這個看需求具體組織父叙。也可以直接拖拽資源形成一個bundle。
創(chuàng)建新bundle
創(chuàng)建好bundle之后可以右鍵它有幾個選項:刪除肴裙,轉變?yōu)樽凅w趾唱,重命名,創(chuàng)建同級對象蜻懦。如果選擇轉變?yōu)樽凅w甜癞,那么bundle圖標就會變成深灰色。創(chuàng)建好變體后宛乃,點擊add child悠咱,可以創(chuàng)建具體的變體bundle。這里記住變體bundle中的資源名必須是一樣的征炼。
組織變體
AssetBundle Browser 支持資源直接拖拽析既。并且會在資源列表中即時顯示警告信息∽话拢可以通過查看信息自己處理或者右鍵包自動處理眼坏。
等所有AB資源組織好后,在Build中配置打包信息并完成打包。配置打包信息
最終我們能在更目錄下找到打包文件:
根目錄創(chuàng)建
值得一提的是:LZMA被第一次解壓后酸些,下次加載會變成LZ4宰译,加載速度會更快。
編寫腳本加載AB
主要分兩種:一種是本地加載擂仍,還有一種是聯(lián)網(wǎng)下載后加載囤屹。
本地加載的話,先通過 LoadFromFile
或者LoadFromMemoryAsync
來加載bundle,然后通過LoadAsset來加載資源逢渔。具體的加載可以這么寫:
string path = "AssetBundles/StandaloneWindows/" + assetBundleName;
AssetBundle ab = AssetBundle.LoadFromFile (path);
GameObject prefab = ab.LoadAsset<GameObject> (assetName);
Instantiate (prefab);
另外一種是使用DownloadHandlerAssetBundle
IEnumerator Start () {
{
string url = "http://website.com/assetbundle";
using (var uwr = new UnityWebRequest (url, UnityWebRequest.kHttpVerbGET)) {
uwr.downloadHandler = new DownloadHandlerAssetBundle (url, 0);
yield return uwr.SendWebRequest ();
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent (uwr);
}
}
}
分包策略
- 將頻繁更新的對象拆分為AssetBundle肋坚,與很少更改的對象分開
- 對可能同時加載的對象進行分組。例如模型肃廓,紋理和動畫
- 如果您發(fā)現(xiàn)多個AssetBundle中的多個對象依賴于來自完全不同的AssetBundle的單個資產(chǎn)智厌,請將依賴關系移動到單獨的AssetBundle。如果多個AssetBundle引用其他AssetBundle中的同一組資產(chǎn)盲赊,則可能值得將這些依賴項拉入共享AssetBundle以減少重復铣鹏。
- 如果不可能同時加載兩組對象,例如標準和高清屬性哀蘑,請確保它們位于自己的AssetBundles中诚卸。
- 如果同時經(jīng)常加載50%的捆綁包葵第,請考慮拆分AssetBundle
- 考慮組合小型(少于5到10個資產(chǎn))但其內容經(jīng)常同時加載的AssetBundle
- 如果一組對象只是同一對象的不同版本,請考慮AssetBundle Variants
參考:
官方:用assetbundle manager + assetbundle browser實踐
siki視頻
AB API