上一章:【Unity3D技術文檔翻譯】第1.8篇 AssetBundles 問題及解決方法
本章原文所在章節:【Unity Manual】→【Working in Unity】→【Advanced Development】→【AssetBundles】→【Unity Asset Bundle Browser tool】
Unity AssetBundle 瀏覽管理工具(Unity Asset Bundle Browser tool)
注意:這個工具是 Unity 標准功能之外的附加功能。想要使用它,你需要從 GitHub(點擊鏈接) 下載,並在下載和安裝 Unity 編輯器之后單獨安裝。
這個工具能讓你瀏覽並編輯項目中 AssetBundles 的結構。它將阻止你創建無效的 AssetBundle,以及提醒你已經存在的 AssetBundles 是否有一些問題。它同樣具有基本的構建功能。
之前我們選擇資源,並在編輯器中手動設置它們的 AssetBundle,現在我們也可以使用 AssetBundle 瀏覽管理工具來處理這些。它可以在任何 Unity5.6 及以上版本中加入使用(將 AssetBundleBrowser 文件夾拖入項目任意位置),並且將在 Window 菜單下創建一個新的菜單選項 AssetBundle Browser。它的 configure 和 build 功能在新的窗口中被分為兩個標簽欄(最新的有三個標簽欄,多了一個 inspect 標簽):
需要 Unity5.6 及以上版本
Configure 窗口使用
注意:這個功能處於預發布狀態,因此在你使用之前,我們建議你將項目進行備份。
這個窗口提供了瀏覽器樣式的界面,用於管理和修改項目中的 AssetBundles。第一次打開這個工具的時候,它將在后台解析所有 AssetBundles 數據,並慢慢地標記它檢測到的警告和錯誤。它將盡可能的與項目保持同步,但並不是總能察覺到工具外發生的動態。想要強制進行錯誤檢測,或者想要更新工具的狀態,點擊左上角的刷新按鈕即可。
窗口被分為了四個部分:Bundle 列表(Bundle List)、Bundle 詳情(Bundle Details)、 資源列表(Asset List),以及 資源詳情(Asset Details)。如圖:
Bundle 列表
左邊的窗格展示了項目中所有的 AssetBundles。可使用的功能有:
- 選擇一個或者一批 Bundles,在右側的資源列表窗格中查看 Bundles 中包含的資源。
- 帶有版本變量的 Bundles 會變成深灰色,並且能被展開,顯示版本變量列表。
- 右擊或者緩慢地雙擊,來重命名 Bundle 或者 Bundle 文件夾。
- 如果一個 Bundle 有任何錯誤、警告或者信息提示,它的右側會出現一個圖標。鼠標懸停在圖標上可以看到更詳細的信息。
- 如果一個 Bundle 包含至少一個場景(使這個 Bundle 成為“場景Bundle”),同時還包含了非場景資源,那么就會被添加“報錯”標記。在你解決這個錯誤前,該 Bundle 將不會被構建。
- 包含重復資源的 Bundles 將被添加“警告”標記。
- 空 Bundles 將被添加“信息提示”標記。由於許多原因,空 Bundles 十分不穩定,並且有時候可能會從列表中消失。
- Bundles 文件夾具有所包含的 Bundles 的所有信息提示。
- 想要解決重復資源警告,你可以采取以下方法:
① 右擊一個單獨的 Bundle,將所有重復資源轉移到一個新的 Bundle。
② 右擊多個 Bundles,你可以選擇將所有重復資源轉移到一個新的 Bundle,或者只是將它們相互之間重復的資源轉移到一個新的 Bundle。
③ 你也可以直接從“資源列表”窗格中拖拽重復的資源到“Bundle 列表”窗格,將它們移進一個 Bundle。更多關於這個方法的信息,可以在下面的資源列表特性介紹中看到。 - 右擊或者點擊 DEL 按鍵來刪除 Bundles。
- 拖拽 Bundles,將它們移進或者移出文件夾,或者合並它們。
- 從 Project 瀏覽器拖拽資源進 Bundles 來添加它們。
- 拖拽資源到空白處來創建一個新的 Bundle。
- 右擊創建新的 Bundle,或者 Bundle 文件夾。
- 右擊選擇“Convert to Variant(轉換為版本變量 Bundle)”。這將為選中的 Bundle 添加一個版本變量(默認叫“newvariant”)。已選中 Bundle 中的所有資源都將移入這個新的版本變量 Bundle。未來將會有版本變量 Bundles 間的錯配檢測(三思:現在已經有如果兩個版本變量 Bundles 中的資源數量或者名稱不相同就會報警告的檢測(因為除了資源的壓縮格式以外,兩個版本變量 Bundles 中的資源應該完全相同))。
標准 Bundle 的圖標:
場景 Bundle 的圖標:
Bundle 詳情
左下角的窗格展示了 Bundle 列表中選中的 Bundles 的詳情。這個窗格將顯示以下幾個信息:
- 整個 Bundle 大小。這是磁盤上所有資源的總和。
- 當前 Bundle 依賴的 Bundles。
- 和當前 Bundle 有關的任何提示信息(錯誤/警告/提示信息)。
資源列表
右上角的窗格提供了 Bundle 列表中選中的 Bundles 的資源列表。可用的功能如下:
- 查看預計包含在 Bundle 中的所有資源,按照列表的頭信息進行排序(有三個排序選項:資源名稱/Bundle 名稱/大小,手動點選)。
- 查看明確包含在 Bundle 中的所有資源,即明確被分配給 Bundle 的資源。檢查器會反映 Bundle 包含的東西,並且在資源名旁邊能看到 Bundle 名稱。
- 查看隱式包含在 Bundle 中的所有資源。這些資源名稱旁邊的 Bundle 名稱是 auto。如果在檢查器中查看這些資源,會發現它們的 Bundle 配置是 None。
① 這些資源能被添加進 Bundle 是因為 Bundle 內有資源依賴了它們。只有沒有明確配置 Bundle 的資源才會被隱式地包含進其他 Bundles。
② 注意:隱式包含列表不一定完整。已知材質、紋理不是總能顯示正確。
③ 因為多個資源可以依賴相同的資源,因此一份資源被隱式包含在多個 Bundles 中是常見的。如果工具檢測到了這種情況,就會將這些 Bundles 和資源都打上警告標記。
④ 為了解決重復包含的問題,你需要手動將資源移出,放入一個新的 Bundle,或者右擊 Bundle,選擇“Move duplicate”選項之一。 - 可以從 Project 窗口拖拽資源進這個窗格的 Bundle 上。只有以一個 Bundle 為目標,且資源類型和 Bundle 類型一致(比如將 scenes 拖拽到 scene Bundle 上),才能拖拽成功。
- 從資源列表拖拽明確或者隱式包含的資源到 Bundle 列表,將它們添加到其他不同的 Bundles 中,或者新建的一個 Bundle 中。
- 右擊,或者按 DEL 鍵,將選中的資源從 Bundles 中移除(只是從 Bundles 中移除,不會從項目中移除)。
- 選擇或者雙擊資源,在 Project 窗口中定位它。
當 Bundles 中包含文件夾的時候,有點需要注意。從 Project 窗口中直接拖拽一個資源文件夾到 Bundle 是可以的。當這么做之后,文件夾本身是明確包含的,而文件夾內的內容是隱式包含的。這反映了將資源分配給 Bundle 的優先級。舉個例子,如果你的游戲有五個 prefabs 在 Assets/Prefabs 下,其中一個 PrefabA 是明確分配 Bundle 的,然后你拖拽 Prefabs 文件夾到 Bundle 窗格,那么 PrefabA 將自動生成一個 Bundle,其他四個 prefabs 和文件夾一起生成一個以文件夾小寫名稱命名的 Bundle。
資源詳情
右下角窗格展示了資源列表中選中資源的詳情。這個窗格不能交互,只用來顯示以下可能出現的信息:
- 資源的完整路徑
- 如果是隱式包含的,顯示隱式包含的原因(比如:Is auto included in bundle(s) due to parent(s): TestFolder. 因為父子關系而被隱式包含)
- 如果有警告,顯示警告的原因
- 如果有報錯,顯示報錯的原因
可能的問題及解決方案
- 無法重命名或者刪除一個明確的 Bundle。當你第一次將本工具添加到已存在的項目中時,這個問題偶爾會發生。你需要通過 Unity 菜單系統強制重新導入你的資源,來刷新數據。
Build 窗口使用
Build 窗口提供了基本的構建功能,讓你可以開始使用 AssetsBundles。在大多數專業的使用情景下,開發者不再需要更高級的構建步驟了。如果這不能滿足你的需求,你可以查看本工具構建相關的代碼,並重寫它們。窗口相關交互接口:
- Build Target - Bundles 將要構建到的平台。
- Output Path - 保存構建好的 Bundles 的路徑。默認路徑是 AssetBundles/。你可以手動編輯這個路徑,或者選擇“Browser”來選擇路徑。想要返回默認路徑,點擊“Reset”按鈕即可。
- Clear Folders - 在構建之前,將構建路徑下的文件夾的所有數據刪除。
- Copy to StreamingAssets - 在構建完成后,將結果拷貝到
Assets/StreamingAssets 目錄下。這在測試中可以使用,但是在產品中不起作用。 - Advanced Settings
① Compression - 在不壓縮、LZMA壓縮算法、LZ4壓縮算法中選擇一個作為壓縮方式。
② Exclude Type Information - 在 AssetBundles 中不包含類型信息。
③ Force Rebuild - 在構建時重新構建需要構建的 AssetBundles。和 “Clear Folders”不同的是,在構建時不被包含的 Bundles 不會被刪除。
④ Ignore Type Tree Changes - 當進行增量構建檢查時,忽略類型樹的變化。
⑤ Append Hash - 為 Bundle 名稱添加 hash。
⑥ Strict Mode - 在構建中途,如果有任何報錯,就終止構建。
⑦ Dry Run Build - 進行 dry run 構建。
⑧ Build - 開始構建。
(三思:AssetsBundles 相關內容告一段落。后面看到其他相關內容會作為補充內容加上。后面會繼續翻譯官方手冊其他部分的內容,視重要性和難度來選擇,第2.0篇再見!)
如果本文對你有幫助的話,點個贊或者評論一下吧!