Unity3D開發(fā)標(biāo)準(zhǔn)教程-游戲資源更新_第1頁(yè)
Unity3D開發(fā)標(biāo)準(zhǔn)教程-游戲資源更新_第2頁(yè)
Unity3D開發(fā)標(biāo)準(zhǔn)教程-游戲資源更新_第3頁(yè)
Unity3D開發(fā)標(biāo)準(zhǔn)教程-游戲資源更新_第4頁(yè)
Unity3D開發(fā)標(biāo)準(zhǔn)教程-游戲資源更新_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1頁(yè)游戲資源更新第2頁(yè)10.1 初識(shí)AssetBundleAssetBundle是將資源用Unity提供的一種用于存儲(chǔ)資源的壓縮格式打包后的集合,它是對(duì)資源管理的一個(gè)擴(kuò)展,可以動(dòng)態(tài)的加載和卸載,并且大大節(jié)約了游戲所占的空間,即使是已經(jīng)發(fā)布的游戲也可以用其來(lái)增加新的內(nèi)容。一般情況下,AssetBundle的開發(fā)流程具體步驟如下:(1)創(chuàng)建AssetBundle:開發(fā)者在Unity編輯器中通過腳本來(lái)將所需的資源打包成AssetBundle文件。(2)上傳至服務(wù)器:開發(fā)者創(chuàng)建好AssetBundle文件后,可通過上傳工具將其上傳到游戲的服務(wù)器中,使游戲客戶端可以通過訪問服務(wù)器來(lái)獲取當(dāng)前所需要的資源,進(jìn)而實(shí)現(xiàn)游戲的更新。第3頁(yè)10.1 初識(shí)AssetBundle(3)下載AssetBundle:游戲在運(yùn)行時(shí),客戶端會(huì)將服務(wù)器上傳的游戲更新所需的AssetBundle下載到本地設(shè)備中,再通過加載模塊將資源加載到游戲中。Unity提供了相應(yīng)的API可供使用來(lái)完成從服務(wù)器端下載AssetBundle。(4)加載AssetBundle:AssetBundle文件下載成功后,開發(fā)者通過Unity提供的API可以加載資源包里所包含的模型、紋理圖、音頻、動(dòng)畫、場(chǎng)景等,并將其實(shí)例化來(lái)更新游戲客戶端。(5)卸載AssetBundle:在Unity中提供了相應(yīng)的方法來(lái)卸載AssetBundle,卸載AssetBundle可以節(jié)約內(nèi)存資源,并且保證資源的正常更新。第4頁(yè)10.2AssetBundle的基本使用10.2.1 AssetBundle的打包1. AssetBundle系統(tǒng)新建一個(gè)項(xiàng)目并命名為“BNUAssetBunds”,點(diǎn)擊GameObject→3DObject→Cube,然后在Assets窗口創(chuàng)建一個(gè)Prefab,并命名為“Cubeasset”,然后將剛剛創(chuàng)建好的Cube拖拽到Cubeasset上,如圖10-1所示。圖10-1創(chuàng)建cubeasset預(yù)制件第5頁(yè)10.2AssetBundle的基本使用10.2.1 AssetBundle的打包1. AssetBundle系統(tǒng)然后單擊剛剛創(chuàng)建好的預(yù)制件Cubeasset,在Inspector面板底部有AssetBundle的創(chuàng)建工具,如圖10-2所示。接下來(lái)創(chuàng)建AssetBundle,空的AssetBundles可以通過點(diǎn)擊菜單選項(xiàng)“New…”來(lái)創(chuàng)建,將其命名為“cubeb”,如圖10-3所示。

圖10-2AssetBundle創(chuàng)建工具 圖10-3將對(duì)象的AssetBundle命名cubeb第6頁(yè)10.2AssetBundle的基本使用10.2.1 AssetBundle的打包2. BuildAssetBundles方法1 publicstaticAssetBundleMainfestBuildAssetBundles(stringoutputPath,BuildAssetBundleOptions2assetBundleOptions=BuildAssetBundleOption.None,BuildTargettargetPlatfom=BuildTarget.WebPlayer);

說明:上述聲明中參數(shù)含義中“OutPath”參數(shù)為AssetBundls的輸出路徑,一般情況下為Assets下的某一個(gè)文件夾。

第7頁(yè)10.2AssetBundle的基本使用10.2.1 AssetBundle的打包右鍵單擊Create→Folder創(chuàng)建一個(gè)文件夾,并命名為“C#”,然后在C#文件夾下右鍵單擊Create→C#Script,并命名為“BNUBuildAsset”,雙擊腳本編寫代碼來(lái)將上面創(chuàng)建的cubeasset打包成AssetBundles并將其導(dǎo)出,具體實(shí)現(xiàn)如下面代碼片段所示1 usingUnityEngine;2 usingSystem.Collections;3 usingUnityEditor; //導(dǎo)入系統(tǒng)相關(guān)類4 publicclassBNUBuildAsset:MonoBehaviour{5 [MenuItem("Test/BuildAssetBundles")] //添加菜單欄"Test"以及子菜單"BuildAssetBundles"6 staticvoidBuildAssetBundles(){ //聲明BuildAssetBundles方法7 //將資源打包到本項(xiàng)目中的Assetbundle文件夾下,并設(shè)置為未壓縮格式8 BuildPipeline.BuildAssetBundles(Application.dataPath+"/Assetbundle",9 BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);10 }}

第8頁(yè)10.2AssetBundle的基本使用10.2.1 AssetBundle的打包此腳本編寫完后并不需要掛載到對(duì)象或者主攝像機(jī)上,編寫完成后會(huì)在菜單欄自動(dòng)生成“Test”項(xiàng),如圖10-4所示。單擊其子菜單“BuildAssetBundles”,完成AssetBundle的打包,打包完成后會(huì)在AssetBundle文件夾下生成相關(guān)文件,如圖10-5所示。

圖10-4生成Test菜單 圖10-5AssetBundle打包文件第9頁(yè)10.2AssetBundle的基本使用10.2.1 AssetBundle的打包每一個(gè)AssetBundle資源將會(huì)有一個(gè)和原文件相關(guān)的“.mainfest”的文本類型的文件,該文件提供了所打包資源的CRC和資源依賴的信息,比如本案例中的Cubeasset打包成的“cubeb.mainfest”文件,如圖10-6所示。

圖10-6AssetBundle打包文件第10頁(yè)10.2AssetBundle的基本使用10.2.2 下載AssetBundle1. 非緩存機(jī)制非緩存機(jī)制通過創(chuàng)建一個(gè)WWW實(shí)例來(lái)下載AssetBundle文件。采用此種方式下載AssetBundle的文件不會(huì)存入U(xiǎn)nity引擎的緩存區(qū)。

3 publicclassBNUDownoad:MonoBehaviour{4 publicstringBundleURL; //定義URL字符串5 publicstringAssetName; //定義資源名字字符串6 IEnumeratorStart(){7 using(WWWwww=newWWW(BundleURL)){//創(chuàng)建一個(gè)網(wǎng)頁(yè)鏈接請(qǐng)求,并賦給www8 yieldreturnwww; //返回www的值9 if(www.error!=null) //如果下載過程中出現(xiàn)錯(cuò)誤10 Debug.Log("WWWdownloadhadanerror:"+www.error);//打印錯(cuò)誤的提示信息11 AssetBundlebundle=www.assetbundle; //下載AssetBundle12 if(AssetName=="") //如果沒有指定具體的資源名字13 Instantiate(bundle.mainAsset); //實(shí)例化主資源14 else15 Instantiate(bundle.LoadAsset(AssetName)); //否則實(shí)例化指定名字的資源16 bundle.Unload(false); //釋放bundle的序列化數(shù)據(jù)

第11頁(yè)10.2AssetBundle的基本使用10.2.2 下載AssetBundle2. 緩存機(jī)制緩存機(jī)制通過WWW類下的LoadFromCacheOrDownload接口來(lái)實(shí)現(xiàn)AssetBundle的下載。通過緩存機(jī)制下載的AssetBundle會(huì)被存儲(chǔ)在Unity的本地緩存區(qū)中。Unity提供的默認(rèn)緩存大小在不同平臺(tái)上也有所不同,在WebPlayer平臺(tái)上發(fā)布的網(wǎng)頁(yè)游戲默認(rèn)緩存大小為50MB;在PC客戶端發(fā)布的游戲和在iOS/Android平臺(tái)上發(fā)布移動(dòng)游戲默認(rèn)緩存大小為4GB。4 publicclassBNUDownloadasset:MonoBehaviour{5 publicstringBundleURL; //定義URL字符串6 publicstringAssetName; //定義資源名字字符串7 publicintversion; //定義版本號(hào)8 voidStart(){9 StartCoroutine(DownloadAndCache()); //開始緩存機(jī)制下載協(xié)同程序10 }

第12頁(yè)10.2AssetBundle的基本使用10.2.2 下載AssetBundle2. 緩存機(jī)制11 IEnumeratorDownloadAndCache(){12 while(!Caching.ready) //如果換成沒準(zhǔn)備好13 yieldreturnnull; //返回空對(duì)象14 using(WWWwww=WWW.LoadFromCacheOrDownload(BundleURL,version)){15 //創(chuàng)建一個(gè)網(wǎng)頁(yè)鏈接請(qǐng)求,并賦給www16 yieldreturnwww;//返回www17 if(www.error!=null)//如果下載過程中出現(xiàn)錯(cuò)誤18 thrownewException("WWWdownloadhadanerror:"+www.error);//拋出異常19 AssetBundlebundle=www.assetbundle; //下載AssetBundle20 if(AssetName=="") //如果未指定打包的資源21 Instantiate(bundle.mainAsset); //實(shí)例化主資源22 else23 Instantiate(bundle.LoadAsset(AssetName)); //否則實(shí)例化指定資源24 bundle.Unload(false); //釋放bundle的序列化數(shù)據(jù)25 }}}

第13頁(yè)10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載AssetBundle下載完成后,并不能直接被使用,需要將AssetBundle加載到內(nèi)存中并且創(chuàng)建成具體的文件對(duì)象,這個(gè)過程就是AssetBundle的加載,需要開發(fā)者編寫代碼實(shí)現(xiàn)。

1. 如何加載AssetBundleUnity提供了三種不同的方法來(lái)從已經(jīng)下載的數(shù)據(jù)中加載AssetBundleAssetBundle.LoadAssetAssetBundle.LoadAssetAsyncAssetBundle.LoadAllAssets下面編寫腳本來(lái)加載AssetBundle,在C#文件夾下右鍵單擊Create→C#Script創(chuàng)建一個(gè)腳本,并命名為“BNULoadAsset”,雙擊腳本編寫代碼進(jìn)行編寫,具體實(shí)現(xiàn)如下面的代碼片段所示。

第14頁(yè)10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載1 usingUnityEngine;2 usingSystem.Collections; //導(dǎo)入系統(tǒng)相關(guān)類3 publicclassBNULoadAsset:MonoBehaviour{4 voidOnGUI(){ //聲明OnGUI方法5 if(GUILayout.Button("LoadAssetbundle")){ //創(chuàng)建加載AssetBundle按鈕,并判斷是否被按下6 AssetBundlemanifestBundle=AssetBundle.CreateFromFile(Application.dataPath7 +"/Assetbundle/AssetBundle"); //首先加載Manifest文件;8 if(manifestBundle!=null){ //如果Mainfest文件不為空9 AssetBundleManifestmanifest=(AssetBundleManifest)manifestBundle.LoadAsset(10 "AssetBundleManifest"); //加載主資源文件的AssetBundle11 AssetBundlecubeBundle=AssetBundle.CreateFromFile(Application.dataPath12 +"/Assetbundle/cubeb"); //加載cube對(duì)象的AssetBundle13 GameObjectcube=cubeBundle.LoadAsset("Cube")asGameObject; //獲取cube對(duì)象14 if(cube!=null){15 Instantiate(cube); //實(shí)例化cube16 }}}}}

第15頁(yè)10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載點(diǎn)擊運(yùn)行按鈕之后,案例的運(yùn)行效果會(huì)顯示在Game窗口中,在屏幕的左上角有一個(gè)加載AssetBundle資源的按鈕,如圖10-7所示。單擊按鈕,在窗口中會(huì)出現(xiàn)實(shí)例化的cube對(duì)象,并且在左側(cè)的層次結(jié)構(gòu)中也有顯示,如圖10-8所示。

圖10-7案例運(yùn)行效果 10-8實(shí)例化cube對(duì)象第16頁(yè)10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載2. AssetBundle的卸載

AssetBundle.Unload(flase)說明:false是指釋放AssetBundle文件的內(nèi)存鏡像,不包含Load創(chuàng)建的Asset內(nèi)存對(duì)象。

AssetBundle.Unload(true)說明:true是釋放那個(gè)AssetBundle文件內(nèi)存鏡像和并銷毀所有用Load創(chuàng)建的Asset內(nèi)存對(duì)象。

第17頁(yè)10.3 AssetBundle相關(guān)知識(shí)10.3.1 管理依賴如果一個(gè)共享的依賴資源被包含在每一個(gè)使用它的對(duì)象中,那么當(dāng)這些對(duì)象被打包時(shí),此部分共享的資源就會(huì)被多次打包,這樣會(huì)造成內(nèi)存的浪費(fèi)。為了避免這種浪費(fèi),需要將共享的資源打包到一個(gè)單獨(dú)的AssetBundle中,然后讓兩個(gè)模型所隸屬的AssetBundle分別依賴于該AssetBundle。

第18頁(yè)10.3 AssetBundle相關(guān)知識(shí)10.3.2儲(chǔ)存和加載二進(jìn)制文件下面是一個(gè)在AssetBundle中存儲(chǔ)和加載二進(jìn)制數(shù)據(jù)的案例1 usingUnityEngine;2 usingSystem.Collections;3 publicclassBNUBinarydata:MonoBehaviour{4 stringurl="/mygame/assetbundles/assetbundle1.unity3d"; 5 //定義url字符串6 IEnumeratorStart(){7 WWWwww=WWW.LoadFromCacheOrDownload(url,1);//通過所給的URL開始一個(gè)下載8 yieldreturnwww; //等待下載完成9 AssetBundlebundle=www.assetBundle; //加載并且取回AssetBundle10 TextAssettxt=bundle.LoadAsset("myBinaryAsText")asTextAsset;//加載對(duì)象11 byte[]bytes=txt.bytes; //檢索二進(jìn)制數(shù)據(jù)的字節(jié)數(shù)組12 }}

第19頁(yè)10.3 AssetBundle相關(guān)知識(shí)10.3.3 在資源中包含腳本如果你想在AssetBundles中包含代碼,就需要將腳本預(yù)編譯并上傳到網(wǎng)站中,摒棄引用Reflection類來(lái)實(shí)現(xiàn)。

1 usingUnityEngine;2 usingSystem.Collections;3 publicclassIncludescripts

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論