Unity3d游戲開發(fā)中的AssetsBundle思路與方法運(yùn)用_第1頁
Unity3d游戲開發(fā)中的AssetsBundle思路與方法運(yùn)用_第2頁
Unity3d游戲開發(fā)中的AssetsBundle思路與方法運(yùn)用_第3頁
Unity3d游戲開發(fā)中的AssetsBundle思路與方法運(yùn)用_第4頁
Unity3d游戲開發(fā)中的AssetsBundle思路與方法運(yùn)用_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、想要認(rèn)識(shí)Unity3d游戲開發(fā)中的AssetsBundle,我們需要先理解幾個(gè)概念二進(jìn)制文件:AssetsBundle可以將二進(jìn)制文件直接封裝在里面。比如圖片和 聲音和文本信息等。prefab : prefab可以圭寸裝成 AssetsBundle。prefab身上含有游戲?qū)ο罄锏?物體材質(zhì),游戲腳本,組件,動(dòng)畫資源,貼圖,等游戲所需要的東西,都封裝在 一起。當(dāng)從服務(wù)器上將 Assetsbundle下載以后直接實(shí)例化就可以放入游戲中。 這是非常方便的。場景文件:在我們的游戲工程里,Scene視圖里會(huì)包含我們需要游戲的所有 游戲?qū)ο螅覀円部梢园颜麄€(gè)場景封裝在AssetsBundle中。需要說明

2、的是,它不能在移動(dòng)平臺(tái)上用。因?yàn)橐苿?dòng)平臺(tái)上不能更新腳本的。簡單的說來,就是在移動(dòng)平臺(tái)上,即使下載了 AssetsBundle,腳本也不會(huì)執(zhí)行。移動(dòng)平臺(tái):因?yàn)樵谝苿?dòng)平臺(tái)腳本不能更新,所以開發(fā)者無法繞過App store和google play這種在線商店升級(jí)應(yīng)用程序。唯一能做到的就是更新資源。例如, 在我們的游戲版本號(hào),在處理版本升級(jí)的時(shí)候,有大版本號(hào)和小版本號(hào)。大版本 號(hào)主要是升級(jí)游戲腳本,需要在 AppStore中更新,如4.0,5.0這都屬于大版本 號(hào)。小版本號(hào)是如4.1.2,5.0.2這種只是更新游戲中的資源,通過自己游戲的服 各器就可以完成。通過AssetsBundle在自己服務(wù)器上下

3、載,然后適應(yīng)在游戲中。 如果非要更新腳本信息,必須要更新腳本那么只能在AppStore或者googlePlay去更新大版本。移動(dòng)平臺(tái)上綁定腳本處理:移動(dòng)平臺(tái)上不能更新腳本,對(duì)于prefab上綁定的腳本,程序通過服務(wù)器下載這個(gè)AssetsBundle,載入到工程中這個(gè)綁定的腳本 是不會(huì)被執(zhí)行的。但是對(duì)于如果本地工程有這個(gè)被綁定的腳本,那么unity會(huì)自動(dòng)將這條腳本綁定在下載的prefab中,并且他們執(zhí)行的非常好。需要注意的是, 有時(shí)我們會(huì)在腳本中寫一些public變量,有可能不同的prefab上,有可能不同©iky)奇酷學(xué)院I I、X«Z 3 1 KU 匚 DU.COM的Pr

4、efab上綁定的是相同的腳本,只是Inspector腳本中的public參數(shù)不同。 別擔(dān)心這一點(diǎn)Assetbundle中的Prefab也是沒問題,所以說只要大版本中的腳 本沒問題,在小版本中只更新游戲資源是一點(diǎn)問題都么有的。移動(dòng)優(yōu)化:之前我們說過可以將游戲中的某個(gè)游戲?qū)ο蠓庋b成Assetbundle,也可以將游戲中的整個(gè)場景也封裝成 Assetbundle。但是我認(rèn)為需要巧妙的使用 封裝場景,因?yàn)閳鼍爸锌隙ㄓ泻芏喙玫哪P?,如果打包場景的話那么?nèi)存與size就是公用模型的size * N個(gè)場景,想想其實(shí)挺恐怖的。其實(shí)我們可以巧妙的 使用,首先把場景中公用的部分和私有的部分統(tǒng)統(tǒng)放入U(xiǎn)nity,然

5、后烘培整個(gè)場景。當(dāng)場景烘培完畢后把公用的模型部分在拿出去,場景只只保留私有的模型。 還可以做一個(gè)工具將公用模型在場景中的坐標(biāo)保存在XML中(每個(gè)場景文件會(huì)對(duì)應(yīng)一個(gè)公用模型的XML信息),最后在將公用的模型分別封裝在別的Assetbundle中。服務(wù)器上提供每個(gè)場景的 Assetbundle,和公用模型的Assetbundle,般 公用模型的Assetbundle可以放在常駐內(nèi)存中(可能使用頻繁、根據(jù)項(xiàng)目的不同 而定)場景Assetbundle下載完畢后,現(xiàn)載入場景然后在根據(jù)場景對(duì)應(yīng)的XML信息將公用模型部分動(dòng)態(tài)的在添加到場景中,這樣就完成了一個(gè)場景的構(gòu)建。在理解了上面的幾個(gè)概念之后,我們來時(shí)行

6、項(xiàng)目制作。首先,我們先創(chuàng)建一個(gè)場景,如下圖,場景中有模型有腳本。選中兩個(gè)模型 的prefab,并在模型上添加兩個(gè)相應(yīng)的腳本,我們?yōu)榱擞∽C腳本的運(yùn)行,運(yùn)行的時(shí)候打印一串字符串。123456789101112131415161718191(0奇酷學(xué)院I I、X«Z OIKUEDUCOM添加在模型身上的腳本如下:using Uni tyE ngine;using System.Collectio ns;public class Script : Mon oBehaviourpublic stri ng n ame;void Awake ()Debug.Log("my n ame

7、is " + n ame);我們先創(chuàng)建AssetsBundle ,在Project-Assets-Editor文件下創(chuàng)建腳本using Uni tyE ngine;using System.Collectio ns;using UnityEditor;public class Test : EditorMen ultem("Custom Editor/Create AssetBu nl des Mai n")static void CreateAssetB un IdesMa in ()JKOSJ謹(jǐn)廟20212223242526272829303132333435

8、36373839404142434445464748II獲取在Project視圖中選擇的所有游戲?qū)ο驩bject SelectedAsset = Selectio n .GetFiltered (typeof( Object), Selectio nMode.DeepAssets);/遍歷所有的游戲?qū)ο骹oreach (Object obj in SelectedAsset)/本地測試:建議最后將 Assetbundle 放在StreamingAssets文件夾下,如果沒有就創(chuàng)建一個(gè),因?yàn)橐苿?dòng)平臺(tái)下只能讀取這個(gè)路徑/Streami ngAssets是只讀路徑,不能寫入/服務(wù)器下載:就不需要放在

9、這里,服t務(wù)器上客戶端用www類進(jìn)行下載。string targetPath = Application .dataPath + "/StreamingAssets/" + + ".assetb un dle"if (BuildPipeline .BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOpti ons .CollectDepe nden cies) Debug丄og( +"資源打包成功 |");elseDebugLog(obj

10、.name +"資源打包失敗");/刷新編輯-器AssetDatabase.Refresh ();Men ultem("Custom Editor/Create AssetBu nl des ALL")static void CreateAssetB uni desALL ()Cach in g.Clea nCache ();string Path = Application .dataPath + "/StreamingAssets/ALL.assetbundle"Object SelectedAsset = Selectio n

11、.GetFiltered (typeof( Object), Selectio nMode.DeepAssets);495051525354555657585960616263646566671 KO囂膵蓋廟foreach (Object obj in SelectedAsset)Debug.Log ("Create AssetB uni des n ame :" + obj);/這里注意第二個(gè)參數(shù)就行if (BuildPipeline .BuildAssetBundle (null, SelectedAsset, Path, BuildAssetB un dleOpti

12、ons .CollectDepe nden cies) AssetDatabase.Refresh (); else Men ultem("Custom Editor/Create Seen e")static void CreateSce neALL ()/清空一下緩存Cach in g.Clea nCache();string Path = Application .dataPath + "/MyScene.unity3d"stri ng levels = "Assets/Level.u nity" ;/打包場景BuildPipe

13、li ne.BuildPlayer( levels, Path,BuildTarget .WebPlayer, BuildOption s.BuildAdditio nalStreamedSce nes);AssetDatabase.Refresh ();©I 1(0奇酷學(xué)院I I、DIKULDU.COMCreate Assetbundies Main:分開打包,會(huì)生成兩個(gè) AsstesBundle.Create Asstebundles All:將所有對(duì)象打包在一個(gè) AssetsBundle 中備注:需要說明的是,如果選中的是兩個(gè)prefab,則打包的是這兩個(gè)prefab,如果沒有

14、選中任何prefab.打包的時(shí)候,會(huì)把工程里所有的prefab,都會(huì)進(jìn)行打包Create Scenee:是把現(xiàn)在的場景進(jìn)行打包進(jìn)行到上面,我們已經(jīng)打包完成。下面給大家介紹一下如何讀取Asstesbundle.我們創(chuàng)建腳本,并放在像機(jī)上12345678910111213141516171819to奇酷學(xué)院I I、X«Z QI KU 匚 DU.COM代碼如下:using Uni tyE ngine;using System.Collectio ns;public class Run Script : Mon oBehaviour /不同平臺(tái)下StreamingAssets的路徑是不同的,

15、這里需要注意一下。public static readonly string PathURL =#if UNITY_ANDROID"jar:file:" + Applicatio n. dataPath + ”!/assets/"#elif UNITY_IPHONEApplicati on .dataPath + "/Raw/"#elif UNITY_STANDALONE_WIN | UNITY_EDITOR"file:/" + Application .dataPath + "/StreamingAssets/&

16、quot;#else stri ng.Empty;#en dif void On GUI()if(GUILayout .Butto n("Main Assetb un dle")20212223242526272829303132333435363738394041424344454647481 KO參熊蓋廟StartCorouti ne(LoadMai nCacheGameObject(PathURL + "PrefabO.assetbu ndle");StartCorouti ne(LoadMai nCacheGameObject(PathURL +

17、 "Prefab1.assetbu ndle"); if(GUILayout .Butto n( "ALL Assetb un dle")StartCoroutine(LoadALLGameObject(PathURL + "ALL.assetbundle");if(GUILayout .Button ("Ope n Sce ne")StartCorouti ne(LoadSce ne();/讀取一個(gè)資源private lEnumerator LoadMainGameObject(string path) / 在C

18、#中,需要a用到y(tǒng)ield 的話,必須建立在lEnumerator 類中執(zhí)行。/開始下載被指定的路徑WWW bun dle = new WWW(path);/定義bundle為WW類型并且等于所下載下來的 WW中內(nèi)容。yield retur n bun dle;/加載到游戲中yield return In sta ntiate(b un dle.assetB un dle.mai nAsset);bun dle.assetB un dle.U nl oad( false);/讀取全部資源private lEnumerator LoadALLGameObject(string path)WWW

19、bun dle = new WWW(path);yield retur n bun dle;/通過Prefab的名稱把他們都讀取出來49505152535455565758596061626364656667686970711 KO囂膵蓋廟Object obj0 = bun dle.assetBu ndle. Load(" "PrefabO");Object obj1 = bun dle.assetBu ndle .L oad(" "Prefab1");/加載到游戲中yield return In sta ntiate(objO);yield return In sta ntiate(obj1);bun dle.assetB un dle.U nl oad( false);privat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論