AssetBundle Workflow
翻譯原址:https://docs.unity3d.com/2017...
AssetBundle 工作流程
開始使用AssetBundles(以后我簡(jiǎn)稱他AB),遵循以下步驟,更多關(guān)于更多工作流的細(xì)節(jié)信息都可以在本節(jié)的其他頁面找到。
把資源賦值給AB
把資源賦值給AB遵循以下步驟(以下步驟簡(jiǎn)稱打標(biāo)記)
1.在Project View中選擇你想要賦值給AB的資源
2.在Inspector中檢查選中的對(duì)象
3.在Inspector的最低端,你可以看見一部分是賦值A(chǔ)B,另一個(gè)是變體(不知道該咋翻譯這個(gè)單詞,大家可以理解為一個(gè)文件的后綴名)
4.左邊這個(gè)下拉菜單是給AB賦值的,而右邊的則是給變體(真的這個(gè)翻譯的好別扭,真想叫它后綴名)賦值的。
5.點(diǎn)擊左邊的下拉菜單,你看到的是None,這意味著當(dāng)前AB注冊(cè)的名字
6.如果還沒有被創(chuàng)建,你會(huì)看到一個(gè)列表如上圖(翻譯的時(shí)候我反正是沒找著在哪兒,我這里附贈(zèng)一張)
7.點(diǎn)擊 New去創(chuàng)建一個(gè)新的AB(嚴(yán)謹(jǐn)一點(diǎn)說這里應(yīng)該是去創(chuàng)建一個(gè)菜單,待會(huì)兒用于打包可以選擇性被標(biāo)記)
8.輸入你想要?jiǎng)?chuàng)建的AB名稱。注意一下AB的名字是支持文件夾那樣的寫法“/”,這樣就可以添加一個(gè)子文件夾,例如:environment/forest 這樣就會(huì)創(chuàng)建一個(gè)bundle叫做forest的子文件夾在environment
9.只要你選擇或者創(chuàng)建了一個(gè)AB名稱,你就可以根據(jù)你所需在右邊創(chuàng)建一個(gè)Variant(變種,我以后就叫后綴名吧)。后綴名不是像要求AB時(shí)那樣,他是一個(gè)后綴當(dāng)然更不用 “/”
想要關(guān)于AB和附帶的策略信息,參見文檔 “Preparing Assets for AssetBundles”(https://docs.unity3d.com/2017... )
構(gòu)建AB
在Assets文件夾下創(chuàng)建一個(gè)文件夾叫做Editor(之所以接下來的代碼要放在Editor文件夾下是因?yàn)槲覀円獙?duì)unity進(jìn)行拓展只能放在這下面編輯器內(nèi)容參見( https://docs.unity3d.com/2017... )),并在這個(gè)文件夾內(nèi)放置一個(gè)腳本(新建)
using UnityEditor;public class CreateAssetBundles {[MenuItem("Assets/Build AssetBundles")]static void BuildAllAssetBundles(){string assetBundleDirectory = "Assets/AssetBundles";if(!Directory.Exists(assetBundleDirectory){Directory.CreateDirectory(assetBundleDirectory);}BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.Standalone);} }這段腳本首先會(huì)創(chuàng)建一個(gè)菜單欄,在頂部的Assets菜單下就可以找到一個(gè)叫Build AssetBundles(代碼中MenuItem就會(huì)就創(chuàng)建這樣一個(gè)菜單)如果你點(diǎn)擊它,就會(huì)執(zhí)行被這個(gè)Tag(一個(gè)函數(shù)被一個(gè)東西(例如MenuItem)標(biāo)記就有了其他的作用)所標(biāo)記而定函數(shù)的代碼,當(dāng)你點(diǎn)擊Build AssetBundles后一個(gè)對(duì)話框和進(jìn)度條。這將會(huì)把你的標(biāo)記了的資源和ab名稱放到上面代碼中的assetBundleDirectory,這樣就打好了一個(gè)AB(資源包)
要想知道這段代碼具體做了什么,請(qǐng)參見文檔(我是很排斥這種設(shè)計(jì)的,為啥不現(xiàn)在就說,但是后來想想人家畢竟是官方Document,不是教程也可以理解) “Building AssetBundles”( https://docs.unity3d.com/2017... )
把AB上傳到外部存儲(chǔ)
如果用戶打算,從本地存儲(chǔ)去加載,相信你會(huì)對(duì)AssetBundles.LoadFromFile這個(gè)Api感興趣,用法如下:
public class LoadFromFileExample extends MonoBehaviour {
function Start() {var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));if (myLoadedAssetBundle == null) {Debug.Log("Failed to load AssetBundle!");return;}var prefab = myLoadedAssetBundle.LoadAsset.<GameObject>("MyObject");Instantiate(prefab); }}
LoadFromFile 需要一個(gè)路徑參數(shù)
如果你自己管理AB,并需要下載到你的游戲,你或許會(huì)對(duì)UnityWebRequest API感興趣,例子如下:
IEnumerator InstantiateObject() {string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName; UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);yield return request.Send();AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);GameObject cube = bundle.LoadAsset<GameObject>("Cube");GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");Instantiate(cube);Instantiate(sprite); } 看起來很方便的樣子,不過我從來沒用過GetAssetBundle(string,int)需要一個(gè)AB包的URL(英文原版是uri)第二個(gè)參數(shù)是哪種版本的ab你需要(因?yàn)槊總€(gè)版本的資源會(huì)發(fā)生變化ab包的內(nèi)容也不一樣)在這個(gè)例子中,我們?nèi)稳恢赶蛞粋€(gè)本地URL,當(dāng)然你可以指向你存放ab的位置。
UnityWebRequest 有一個(gè)專門處理AB的 DownloadHandlerAssetBundle 可以從這里面獲取請(qǐng)求
不管你用什么方法去得到AB包,現(xiàn)在你要從AB包里面獲取object,需要使用LoadAsset<T>(string)可以從ab包中加載資源,他需要一個(gè)泛型T,指的是這個(gè)資源加載出來后是什么類型的資源(Sprite,Object...),參數(shù)是指的你的資源相對(duì)于你ab包的路徑。你可以隨意的使用返回,回來的東西,就像其他一切unity內(nèi)置的object,例如你可以在場(chǎng)景中創(chuàng)建一個(gè)GameObject,你只需要調(diào)用Instantiate函數(shù)。
更多信息關(guān)于加載AB,參見Using AssetBundles Natively(https://docs.unity3d.com/2017...)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的AssetBundle Workflow的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球看电影最贵的是哪里?日本第三 均价最
- 下一篇: ab 的结果分析