【Unity3D技術文檔翻譯】第1.1篇 AssetBundle 工作流
譯者前言:本章是關於從創建到加載,再到使用 AssetBundle 的整個流程的概述。閱讀本章將對 AssetBundle 的工作流程有個簡單而全面的了解。
本章原文所在章節:【Unity Manual】→【Working in Unity】→【Advanced Development】→【AssetBundles】→【AssetBundle Workflow】
AssetBundle 工作流
可以按照下面的這些步驟來學習 AssetBundle。關於每個步驟的詳細內容,可以在本文檔的其他章節中找到。
將資產(Assets)配置到 AssetBundles
為了將一個資產配置到一個 AssetBundle,需要按照以下步驟:
1. 從你的 Project 面板裏選擇你想要分配到 AssetBundle 裏的資源
2. 觀察 Inspector 面板
3. 在 Inspector 面板的底部,能看到一塊可以設置 AssetBundle 及其變量的區域
4. 左側的下拉選項欄可以設置 AssetBundle,右側的下拉選項欄用來設置變量
5. 左側的下拉選項欄默認顯示“None”,點擊後顯示其他已經註冊過的 AssetBundle 的名稱選項
6. 如果沒有註冊過 AssetBundle,你會看到如圖片所示的列表:
7. 點擊“New...”選項來創建一個新的 AssetBundle
8. 輸入你想要的 AssetBundle 名稱。需要註意,AssetBundle 名稱支持目錄結構。想要添加子文件夾,只需要用“/”分隔文件名稱即可。比如:如果 AssetBundle 名稱是“environment/forest”,將會在“environment”文件下創建一個名為“forest” 的 AssetBundle
9. 一旦你選擇或者創建了一個 AssetBundle 名稱,接著你就可以在右邊的下拉選項欄重復上述步驟,選擇或者創建一個你想要的變量名稱。變量名稱對創建 AssetBundle 不是必須的。
想要閱讀更多關於配置 AssetBundle 以及配置策略相關的內容,請看【為打包 AssetBundles 準備資產】一節。
創建 AssetBundles
在 Asset 文件夾下創建一個 Editor 文件夾,然後將包含以下代碼的腳本文件放在 Editor 文件夾下:
這個腳本將會在“Assets”菜單的最底部,創建一個叫“Build AssetBundles”的按鈕。當你點擊該按鈕,就會執行腳本中與之對應的方法,並出現一個構建進度條。接著,所有被你命名了的資產(assets)都會被構建成對應的 AssetBundle,並放置在你定義的路徑下。在本章節中,該路徑為:“Assets/Build AssetBundles”。
想要知道更多關於這段代碼的細節,請看【創建 AssetBundle】一節。
將 AssetBundles 更新到遠程倉庫
這一步對每個開發者都是不同的,而不是 Unity 告訴你如何去做。如果你計劃將你的 AssetBundles 部署到遠程虛擬主機上,就需要繼續學習相關內容。如果你是完全的本地開發,並打算把你所有的 AssetBundles 都放在本地磁盤上,那麽就可以跳過關於“遠程倉庫”的內容。
加載 AssetBundles 和 資產(Assets)
對於打算從“本地倉庫”加載資源的開發者,你會對“ AssetBundles.LoadFromFile ”這個 API 感興趣。比如下面這段代碼:
LoadFromFile 的參數是 AssetBundle 的路徑。
如果你將 AssetBundles 部署在你自己的虛擬主機上,並且需要在遊戲中下載它們,那麽你會對“ UnityWebRequest ”這個 API 感興趣。比如下面這個例子:
GetAssetBundle(string, int) 的參數有兩個,一個是 AssetBundle 位置的路徑,另一個是你想要下載的 AssetBundle 的版本。在上面這個例子中,我們指向的是一個本地文件。我們也可以將本地路徑替換成任何網絡鏈接,以指向部署在虛擬主機上的 AssetBundles。
UnityWebRequest 有個處理 AssetBundles 的特定方法句柄:DownloadHandlerAssetBundle。這個方法句柄可以從網絡請求(request)中獲取 AssetBundles。
無論你用的是哪個方法,你現在都可以獲取 AssetBundle 對象了。為了獲取 AssetBundle 對象,你可以使用 LoadAsset<T>(string) 方法。該方法有兩個參數,參數T是你嘗試去加載的資源的類型;string 參數是 AssetBundle 中你想要加載的對象的名稱。這個方法會返回你從 AssetBundle 中加載的任何對象。你可以使用這些返回的對象,就像使用 Unity 中的其他任何對象一樣。 比如:如果你想要在場景中創建一個對象,你只需要調用 Instantiate(gameObjectFromAssetBundle) 即可(gameObjectFromAssetBundle 代指你從 AssetBundle 中加載的對象)。
想要了解更多關於加載 AssetBundles 的 APIs 的信息,請看【使用本地 AssetBundle】一節。
如果本文對你有幫助的話,點個贊或者評論一下吧!
【Unity3D技術文檔翻譯】第1.1篇 AssetBundle 工作流