![深入理解unity資源與ab包[文書特制]_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-10/4/34c36806-416a-4714-9390-05a25400f672/34c36806-416a-4714-9390-05a25400f6721.gif)
![深入理解unity資源與ab包[文書特制]_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-10/4/34c36806-416a-4714-9390-05a25400f672/34c36806-416a-4714-9390-05a25400f6722.gif)
![深入理解unity資源與ab包[文書特制]_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-10/4/34c36806-416a-4714-9390-05a25400f672/34c36806-416a-4714-9390-05a25400f6723.gif)
![深入理解unity資源與ab包[文書特制]_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-10/4/34c36806-416a-4714-9390-05a25400f672/34c36806-416a-4714-9390-05a25400f6724.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、深入理解資源(Asset)與AssetBundleAB包文件Assetbundle文件格式可以理解為,擁有一個(gè)列表頭和壓縮數(shù)據(jù)塊列表。列表頭定義了各數(shù)據(jù)塊的起始位置和大小。數(shù)據(jù)塊列表中存儲(chǔ)壓縮過的unity對象的序列化數(shù)據(jù)。AssetBundle對象加載并創(chuàng)建AssetBundle對象。 Assetbundle對象是一個(gè)輕量級(jí)對象,只包含一個(gè)資源(Asset)對象列表和指向?qū)嶋HAB包數(shù)據(jù)的文件對象。AB包文件加載完成后存放在內(nèi)存中,注意只有LZ4能夠以壓縮格式存放在內(nèi)存中。這段內(nèi)存不能直接訪問,由AssetBundle對象負(fù)責(zé)管理。AssetBundle.Unload()會(huì)釋放這段內(nèi)存。Ass
2、et資源實(shí)際上unity中并沒有與資源(Asset)這個(gè)詞對應(yīng)的類。我們一般把從AssetBundle中LoadAsset()出來的對象稱為資源 (Asset)。AssetBundle.LoadAsset()等接口從AssetBundle對象中解壓數(shù)據(jù)反序列化構(gòu)建Object。Unity完美的序列化機(jī)制可以使任何對象都可以直接序列化為連續(xù)內(nèi)存塊,同樣任何對象都可以通過AssetBundle.LoadAsset()反序列化為結(jié)構(gòu)化對象。AssetBundle.LoadAsset()接口返回類型是Object。此功能也暗示了可以將任何對象從ab包內(nèi)存中反序列化出來構(gòu)建。Prefab是什么?創(chuàng)建ab
3、包時(shí),一般會(huì)將prefab打入到包中。游戲中通過AssetBundle.LoadAsset()將prefab對象加載出來。代碼1: 再通過加載出來的prefab構(gòu)建GameObject:代碼 2: 思考:代碼1中m_Prefab是什么?是什么類型?如果是GameObject,那么這個(gè)GameObject為什么沒有出現(xiàn)在場景中?如果是GameObject,為什么一定要通過Instantiate再次clone一個(gè)GameObject出來?Unity的C+代碼分為兩部分,Runtime和Editor。Runtime中包含引擎的所有核心功能,Editor包含編輯器所需核心功能。Prefab.h/cpp
4、存放于Editor中,實(shí)現(xiàn)了編輯器中prefab的功能。Prefab繼承于Object,包含一個(gè)指向GameObject的指針。其功能非常簡單,僅僅只是維護(hù)編輯器中prefab之間的關(guān)聯(lián)關(guān)系,用來實(shí)現(xiàn)編輯器中prefab修改編輯功能。Prefab只是對GameObject在編輯器中一個(gè)功能封裝。上一段源碼:從源碼判斷,Prefab功能非常簡單,只是實(shí)現(xiàn)編輯器中各prefab關(guān)聯(lián)編輯功能。結(jié)論:因此可以推斷,在最終發(fā)布環(huán)境中,并無Prefab對象存在。代碼1中 LoadAsset構(gòu)建的對象是GameObject,此GameObject并不存在于當(dāng)前場景(scene)中,而是被unity放到了一個(gè)
5、空場景中。LoadAsset構(gòu)建的GameObject對象,Unity希望我們把它當(dāng)作資源(asset)使用。對比代碼2中m_Prefab和m_GameObject的scene變量。思考?為什么不能需要構(gòu)建GameObject時(shí),直接從AssetBundle中反序列化構(gòu)建呢?推測Unity希望開發(fā)者們遵循的工程實(shí)踐是,將AssetBundle中反序列化構(gòu)建的GameObject作為資源(asset)進(jìn)行管理。當(dāng)游戲中需要構(gòu)建GameObject時(shí),以資源(asset)為基礎(chǔ)構(gòu)建,而不是從連續(xù)內(nèi)存上反序列化去構(gòu)建。從而將對象構(gòu)建與數(shù)據(jù)解壓解耦。資源(Asset)資源(Asset)是unity希望
6、開發(fā)者們遵循的一種工程實(shí)踐規(guī)范。1. 所有AssetBundle中LoadAsset出來的對象稱為資源(Asset)。2. 資源(Asset)與AssetBundle之間有強(qiáng)耦合關(guān)系。3. 資源(Asset)不要直接被使用在業(yè)務(wù)邏輯中。資源(Asset)和業(yè)務(wù)中創(chuàng)建的對象沒有功能上不同。但在使用方法上有截然不同的區(qū)分。資源(Asset)可以由AssetBundle.Unload(true)統(tǒng)一強(qiáng)制銷毀,也可以單個(gè)銷毀。但是對于同一個(gè)AssetBundle,LoadAsset出的資源(Asset)只能被銷毀一次,銷毀后再重復(fù)LoadAsset()會(huì)失敗。Instantiate()英文翻譯為”實(shí)例
7、化”,個(gè)人覺得這個(gè)接口用英文克隆”clone”描述更準(zhǔn)確。Object.Instantiate()可以對任何對象clone。包括Texture、Shader、AudioClip,當(dāng)然應(yīng)該不會(huì)有人對這類內(nèi)存占用大且不會(huì)被修改的對象clone。所以,遵循unity暗示的工程實(shí)踐規(guī)范。所有占用大量內(nèi)存且不會(huì)被修改的資源(Asset)不被clone,所有需要修改的邏輯對象會(huì)被clone出一個(gè)新的實(shí)例。如下圖所示:Instantiate一個(gè)GameObject時(shí),GameObject和Material會(huì)被clone出新的實(shí)例,而貼圖(Texture)則保持引用。引用與非引用資源非引用資源類型:建議使用Instantiate構(gòu)建新對象。GameObject被Instantiate時(shí),GameObject包含的非引用資源也會(huì)自動(dòng)被Instantiate。GameObjectMaterial引用資源類型:這些對象,在GameObject被Instantiate時(shí)會(huì)保持引用。MeshTextureShaderAudioClipBytes最佳工程實(shí)踐(Best practice)所有資源(Asset)對象不再被引用時(shí),AssetBundle才可以被銷毀由于資源(Asset)對象被銷毀后,無法重復(fù)從AssetBundle中Load出來。因此,必須所有資源(A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共管理課題研究培訓(xùn)心得體會(huì)
- 休閑農(nóng)業(yè)與鄉(xiāng)村旅游融合發(fā)展規(guī)劃報(bào)告-2025年鄉(xiāng)村旅游與旅游目的地營銷策略研究
- 休閑食品健康化轉(zhuǎn)型與創(chuàng)新營銷策略:2025年市場拓展研究報(bào)告
- 二年級(jí)數(shù)學(xué)游戲化教學(xué)設(shè)計(jì)計(jì)劃
- 山東省威海市榮成十四中學(xué)2024年九年級(jí)化學(xué)第一學(xué)期期末達(dá)標(biāo)檢測模擬試題含解析
- 鄭州軟件職業(yè)技術(shù)學(xué)院《高級(jí)日語視聽說》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東省泰安市東平縣2024年八上物理期末綜合測試試題含解析
- 四年級(jí)語文課外閱讀推廣計(jì)劃
- 河南省安陽市滑縣2024-2025學(xué)年數(shù)學(xué)八上期末檢測試題含解析
- 上海財(cái)經(jīng)大學(xué)《預(yù)防醫(yī)學(xué)C》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025-2030益智玩具行業(yè)市場深度分析及前景趨勢與投資研究報(bào)告
- 吉林會(huì)考地理試題及答案
- 小學(xué)科學(xué)探究式學(xué)習(xí)活動(dòng)方案
- 《計(jì)算機(jī)視覺技術(shù)》課件
- 2025至2030年P(guān)P環(huán)保料托盤項(xiàng)目投資價(jià)值分析報(bào)告
- 防洪防汛安全教育知識(shí)培訓(xùn)
- 用電檢查員技能培訓(xùn)課件-三相四線計(jì)量裝置錯(cuò)接線分析及操作
- 遠(yuǎn)景能源考試題目及答案
- DB42-T 2046-2023 水文自動(dòng)測報(bào)站運(yùn)行維護(hù)技術(shù)規(guī)范
- 常年法律顧問勞動(dòng)法專項(xiàng)法律服務(wù)工作方案
- 福建中醫(yī)藥大學(xué)《大學(xué)英語Ⅳ(藝體類)》2023-2024學(xué)年第二學(xué)期期末試卷
評(píng)論
0/150
提交評(píng)論