版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第1頁游戲資源更新第2頁10.1 初識AssetBundleAssetBundle是將資源用Unity提供的一種用于存儲資源的壓縮格式打包后的集合,它是對資源管理的一個擴展,可以動態(tài)的加載和卸載,并且大大節(jié)約了游戲所占的空間,即使是已經(jīng)發(fā)布的游戲也可以用其來增加新的內(nèi)容。一般情況下,AssetBundle的開發(fā)流程具體步驟如下:(1)創(chuàng)建AssetBundle:開發(fā)者在Unity編輯器中通過腳本來將所需的資源打包成AssetBundle文件。(2)上傳至服務(wù)器:開發(fā)者創(chuàng)建好AssetBundle文件后,可通過上傳工具將其上傳到游戲的服務(wù)器中,使游戲客戶端可以通過訪問服務(wù)器來獲取當(dāng)前所需要的資源,進而實現(xiàn)游戲的更新。第3頁10.1 初識AssetBundle(3)下載AssetBundle:游戲在運行時,客戶端會將服務(wù)器上傳的游戲更新所需的AssetBundle下載到本地設(shè)備中,再通過加載模塊將資源加載到游戲中。Unity提供了相應(yīng)的API可供使用來完成從服務(wù)器端下載AssetBundle。(4)加載AssetBundle:AssetBundle文件下載成功后,開發(fā)者通過Unity提供的API可以加載資源包里所包含的模型、紋理圖、音頻、動畫、場景等,并將其實例化來更新游戲客戶端。(5)卸載AssetBundle:在Unity中提供了相應(yīng)的方法來卸載AssetBundle,卸載AssetBundle可以節(jié)約內(nèi)存資源,并且保證資源的正常更新。第4頁10.2AssetBundle的基本使用10.2.1 AssetBundle的打包1. AssetBundle系統(tǒng)新建一個項目并命名為“BNUAssetBunds”,點擊GameObject→3DObject→Cube,然后在Assets窗口創(chuàng)建一個Prefab,并命名為“Cubeasset”,然后將剛剛創(chuàng)建好的Cube拖拽到Cubeasset上,如圖10-1所示。圖10-1創(chuàng)建cubeasset預(yù)制件第5頁10.2AssetBundle的基本使用10.2.1 AssetBundle的打包1. AssetBundle系統(tǒng)然后單擊剛剛創(chuàng)建好的預(yù)制件Cubeasset,在Inspector面板底部有AssetBundle的創(chuàng)建工具,如圖10-2所示。接下來創(chuàng)建AssetBundle,空的AssetBundles可以通過點擊菜單選項“New…”來創(chuàng)建,將其命名為“cubeb”,如圖10-3所示。
圖10-2AssetBundle創(chuàng)建工具 圖10-3將對象的AssetBundle命名cubeb第6頁10.2AssetBundle的基本使用10.2.1 AssetBundle的打包2. BuildAssetBundles方法1 publicstaticAssetBundleMainfestBuildAssetBundles(stringoutputPath,BuildAssetBundleOptions2assetBundleOptions=BuildAssetBundleOption.None,BuildTargettargetPlatfom=BuildTarget.WebPlayer);
說明:上述聲明中參數(shù)含義中“OutPath”參數(shù)為AssetBundls的輸出路徑,一般情況下為Assets下的某一個文件夾。
第7頁10.2AssetBundle的基本使用10.2.1 AssetBundle的打包右鍵單擊Create→Folder創(chuàng)建一個文件夾,并命名為“C#”,然后在C#文件夾下右鍵單擊Create→C#Script,并命名為“BNUBuildAsset”,雙擊腳本編寫代碼來將上面創(chuàng)建的cubeasset打包成AssetBundles并將其導(dǎo)出,具體實現(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 //將資源打包到本項目中的Assetbundle文件夾下,并設(shè)置為未壓縮格式8 BuildPipeline.BuildAssetBundles(Application.dataPath+"/Assetbundle",9 BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);10 }}
第8頁10.2AssetBundle的基本使用10.2.1 AssetBundle的打包此腳本編寫完后并不需要掛載到對象或者主攝像機上,編寫完成后會在菜單欄自動生成“Test”項,如圖10-4所示。單擊其子菜單“BuildAssetBundles”,完成AssetBundle的打包,打包完成后會在AssetBundle文件夾下生成相關(guān)文件,如圖10-5所示。
圖10-4生成Test菜單 圖10-5AssetBundle打包文件第9頁10.2AssetBundle的基本使用10.2.1 AssetBundle的打包每一個AssetBundle資源將會有一個和原文件相關(guān)的“.mainfest”的文本類型的文件,該文件提供了所打包資源的CRC和資源依賴的信息,比如本案例中的Cubeasset打包成的“cubeb.mainfest”文件,如圖10-6所示。
圖10-6AssetBundle打包文件第10頁10.2AssetBundle的基本使用10.2.2 下載AssetBundle1. 非緩存機制非緩存機制通過創(chuàng)建一個WWW實例來下載AssetBundle文件。采用此種方式下載AssetBundle的文件不會存入Unity引擎的緩存區(qū)。
3 publicclassBNUDownoad:MonoBehaviour{4 publicstringBundleURL; //定義URL字符串5 publicstringAssetName; //定義資源名字字符串6 IEnumeratorStart(){7 using(WWWwww=newWWW(BundleURL)){//創(chuàng)建一個網(wǎng)頁鏈接請求,并賦給www8 yieldreturnwww; //返回www的值9 if(www.error!=null) //如果下載過程中出現(xiàn)錯誤10 Debug.Log("WWWdownloadhadanerror:"+www.error);//打印錯誤的提示信息11 AssetBundlebundle=www.assetbundle; //下載AssetBundle12 if(AssetName=="") //如果沒有指定具體的資源名字13 Instantiate(bundle.mainAsset); //實例化主資源14 else15 Instantiate(bundle.LoadAsset(AssetName)); //否則實例化指定名字的資源16 bundle.Unload(false); //釋放bundle的序列化數(shù)據(jù)
第11頁10.2AssetBundle的基本使用10.2.2 下載AssetBundle2. 緩存機制緩存機制通過WWW類下的LoadFromCacheOrDownload接口來實現(xiàn)AssetBundle的下載。通過緩存機制下載的AssetBundle會被存儲在Unity的本地緩存區(qū)中。Unity提供的默認(rèn)緩存大小在不同平臺上也有所不同,在WebPlayer平臺上發(fā)布的網(wǎng)頁游戲默認(rèn)緩存大小為50MB;在PC客戶端發(fā)布的游戲和在iOS/Android平臺上發(fā)布移動游戲默認(rèn)緩存大小為4GB。4 publicclassBNUDownloadasset:MonoBehaviour{5 publicstringBundleURL; //定義URL字符串6 publicstringAssetName; //定義資源名字字符串7 publicintversion; //定義版本號8 voidStart(){9 StartCoroutine(DownloadAndCache()); //開始緩存機制下載協(xié)同程序10 }
第12頁10.2AssetBundle的基本使用10.2.2 下載AssetBundle2. 緩存機制11 IEnumeratorDownloadAndCache(){12 while(!Caching.ready) //如果換成沒準(zhǔn)備好13 yieldreturnnull; //返回空對象14 using(WWWwww=WWW.LoadFromCacheOrDownload(BundleURL,version)){15 //創(chuàng)建一個網(wǎng)頁鏈接請求,并賦給www16 yieldreturnwww;//返回www17 if(www.error!=null)//如果下載過程中出現(xiàn)錯誤18 thrownewException("WWWdownloadhadanerror:"+www.error);//拋出異常19 AssetBundlebundle=www.assetbundle; //下載AssetBundle20 if(AssetName=="") //如果未指定打包的資源21 Instantiate(bundle.mainAsset); //實例化主資源22 else23 Instantiate(bundle.LoadAsset(AssetName)); //否則實例化指定資源24 bundle.Unload(false); //釋放bundle的序列化數(shù)據(jù)25 }}}
第13頁10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載AssetBundle下載完成后,并不能直接被使用,需要將AssetBundle加載到內(nèi)存中并且創(chuàng)建成具體的文件對象,這個過程就是AssetBundle的加載,需要開發(fā)者編寫代碼實現(xiàn)。
1. 如何加載AssetBundleUnity提供了三種不同的方法來從已經(jīng)下載的數(shù)據(jù)中加載AssetBundleAssetBundle.LoadAssetAssetBundle.LoadAssetAsyncAssetBundle.LoadAllAssets下面編寫腳本來加載AssetBundle,在C#文件夾下右鍵單擊Create→C#Script創(chuàng)建一個腳本,并命名為“BNULoadAsset”,雙擊腳本編寫代碼進行編寫,具體實現(xiàn)如下面的代碼片段所示。
第14頁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對象的AssetBundle13 GameObjectcube=cubeBundle.LoadAsset("Cube")asGameObject; //獲取cube對象14 if(cube!=null){15 Instantiate(cube); //實例化cube16 }}}}}
第15頁10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載點擊運行按鈕之后,案例的運行效果會顯示在Game窗口中,在屏幕的左上角有一個加載AssetBundle資源的按鈕,如圖10-7所示。單擊按鈕,在窗口中會出現(xiàn)實例化的cube對象,并且在左側(cè)的層次結(jié)構(gòu)中也有顯示,如圖10-8所示。
圖10-7案例運行效果 10-8實例化cube對象第16頁10.2AssetBundle的基本使用10.2.3 AssetBundle的加載和卸載2. AssetBundle的卸載
AssetBundle.Unload(flase)說明:false是指釋放AssetBundle文件的內(nèi)存鏡像,不包含Load創(chuàng)建的Asset內(nèi)存對象。
AssetBundle.Unload(true)說明:true是釋放那個AssetBundle文件內(nèi)存鏡像和并銷毀所有用Load創(chuàng)建的Asset內(nèi)存對象。
第17頁10.3 AssetBundle相關(guān)知識10.3.1 管理依賴如果一個共享的依賴資源被包含在每一個使用它的對象中,那么當(dāng)這些對象被打包時,此部分共享的資源就會被多次打包,這樣會造成內(nèi)存的浪費。為了避免這種浪費,需要將共享的資源打包到一個單獨的AssetBundle中,然后讓兩個模型所隸屬的AssetBundle分別依賴于該AssetBundle。
第18頁10.3 AssetBundle相關(guān)知識10.3.2儲存和加載二進制文件下面是一個在AssetBundle中存儲和加載二進制數(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開始一個下載8 yieldreturnwww; //等待下載完成9 AssetBundlebundle=www.assetBundle; //加載并且取回AssetBundle10 TextAssettxt=bundle.LoadAsset("myBinaryAsText")asTextAsset;//加載對象11 byte[]bytes=txt.bytes; //檢索二進制數(shù)據(jù)的字節(jié)數(shù)組12 }}
第19頁10.3 AssetBundle相關(guān)知識10.3.3 在資源中包含腳本如果你想在AssetBundles中包含代碼,就需要將腳本預(yù)編譯并上傳到網(wǎng)站中,摒棄引用Reflection類來實現(xiàn)。
1 usingUnityEngine;2 usingSystem.Collections;3 publicclassIncludescripts
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子樂器相關(guān)法律法規(guī)與知識產(chǎn)權(quán)考核試卷
- 煤炭洗選廢渣的高值化利用技術(shù)研究考核試卷
- 電池制造過程中的安全防護措施考核試卷
- 盾構(gòu)機施工中的隧道工程地質(zhì)適應(yīng)性評價考核試卷
- 礦產(chǎn)預(yù)測與評價方法考核試卷
- 電力系統(tǒng)短路故障分析與處理考核試卷
- 礦物填料制造考核試卷
- 工程設(shè)計保證書
- DB5132T 85-2023 熊貓級旅游車輛服務(wù)規(guī)范
- 《冷庫機器人霜情視覺檢測方法研究》
- 宿舍零食盒子項目策劃
- 糖尿病治療研究進展
- 柴油發(fā)電機組采購施工 投標(biāo)方案(技術(shù)方案)
- 招聘司機方案
- 浙江省寧波市2023-2024學(xué)年高一上學(xué)期1月期末地理試題【含答案解析】
- 創(chuàng)業(yè)之星學(xué)創(chuàng)杯經(jīng)營決策常見問題匯總
- 2022年1月上海春季高考英語真題(學(xué)生版+解析版+聽力音頻)
- 家長開放日發(fā)言稿課件
- 公豬站工作總結(jié)匯報
- 2011山東省建筑工程消耗量定額價目表
- 智能化生產(chǎn)線實時監(jiān)測
評論
0/150
提交評論