




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、深入理解資源(Asset)與AssetBundleAB包文件Assetbundle文件格式可以理解為,擁有一個(gè)列表頭和壓縮數(shù)據(jù)塊列表。列表頭定義了各數(shù)據(jù)塊的起始位置和大小。數(shù)據(jù)塊列表中存儲(chǔ)壓縮過的unity對(duì)象的序列化數(shù)據(jù)。AssetBundle對(duì)象加載并創(chuàng)建AssetBundle對(duì)象。 Assetbundle對(duì)象是一個(gè)輕量級(jí)對(duì)象,只包含一個(gè)資源(Asset)對(duì)象列表和指向?qū)嶋HAB包數(shù)據(jù)的文件對(duì)象。AB包文件加載完成后存放在內(nèi)存中,注意只有LZ4能夠以壓縮格式存放在內(nèi)存中。這段內(nèi)存不能直接訪問,由AssetBundle對(duì)象負(fù)責(zé)管理。AssetBundle.Unload()會(huì)釋放這段內(nèi)存。Ass
2、et資源實(shí)際上unity中并沒有與資源(Asset)這個(gè)詞對(duì)應(yīng)的類。我們一般把從AssetBundle中LoadAsset()出來的對(duì)象稱為資源 (Asset)。AssetBundle.LoadAsset()等接口從AssetBundle對(duì)象中解壓數(shù)據(jù)反序列化構(gòu)建Object。Unity完美的序列化機(jī)制可以使任何對(duì)象都可以直接序列化為連續(xù)內(nèi)存塊,同樣任何對(duì)象都可以通過AssetBundle.LoadAsset()反序列化為結(jié)構(gòu)化對(duì)象。AssetBundle.LoadAsset()接口返回類型是Object。此功能也暗示了可以將任何對(duì)象從ab包內(nèi)存中反序列化出來構(gòu)建。Prefab是什么?創(chuàng)建ab
3、包時(shí),一般會(huì)將prefab打入到包中。游戲中通過AssetBundle.LoadAsset()將prefab對(duì)象加載出來。代碼1: 再通過加載出來的prefab構(gòu)建GameObject:代碼 2: 思考:代碼1中m_Prefab是什么?是什么類型?如果是GameObject,那么這個(gè)GameObject為什么沒有出現(xiàn)在場(chǎng)景中?如果是GameObject,為什么一定要通過Instantiate再次clone一個(gè)GameObject出來?Unity的C+代碼分為兩部分,Runtime和Editor。Runtime中包含引擎的所有核心功能,Editor包含編輯器所需核心功能。Prefab.h/cpp
4、存放于Editor中,實(shí)現(xiàn)了編輯器中prefab的功能。Prefab繼承于Object,包含一個(gè)指向GameObject的指針。其功能非常簡(jiǎn)單,僅僅只是維護(hù)編輯器中prefab之間的關(guān)聯(lián)關(guān)系,用來實(shí)現(xiàn)編輯器中prefab修改編輯功能。Prefab只是對(duì)GameObject在編輯器中一個(gè)功能封裝。上一段源碼:從源碼判斷,Prefab功能非常簡(jiǎn)單,只是實(shí)現(xiàn)編輯器中各prefab關(guān)聯(lián)編輯功能。結(jié)論:因此可以推斷,在最終發(fā)布環(huán)境中,并無Prefab對(duì)象存在。代碼1中 LoadAsset構(gòu)建的對(duì)象是GameObject,此GameObject并不存在于當(dāng)前場(chǎng)景(scene)中,而是被unity放到了一個(gè)
5、空?qǐng)鼍爸?。LoadAsset構(gòu)建的GameObject對(duì)象,Unity希望我們把它當(dāng)作資源(asset)使用。對(duì)比代碼2中m_Prefab和m_GameObject的scene變量。思考?為什么不能需要構(gòu)建GameObject時(shí),直接從AssetBundle中反序列化構(gòu)建呢?推測(cè)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)建。從而將對(duì)象構(gòu)建與數(shù)據(jù)解壓解耦。資源(Asset)資源(Asset)是unity希望
6、開發(fā)者們遵循的一種工程實(shí)踐規(guī)范。1. 所有AssetBundle中LoadAsset出來的對(duì)象稱為資源(Asset)。2. 資源(Asset)與AssetBundle之間有強(qiáng)耦合關(guān)系。3. 資源(Asset)不要直接被使用在業(yè)務(wù)邏輯中。資源(Asset)和業(yè)務(wù)中創(chuàng)建的對(duì)象沒有功能上不同。但在使用方法上有截然不同的區(qū)分。資源(Asset)可以由AssetBundle.Unload(true)統(tǒng)一強(qiáng)制銷毀,也可以單個(gè)銷毀。但是對(duì)于同一個(gè)AssetBundle,LoadAsset出的資源(Asset)只能被銷毀一次,銷毀后再重復(fù)LoadAsset()會(huì)失敗。Instantiate()英文翻譯為”實(shí)例
7、化”,個(gè)人覺得這個(gè)接口用英文克隆”clone”描述更準(zhǔn)確。Object.Instantiate()可以對(duì)任何對(duì)象clone。包括Texture、Shader、AudioClip,當(dāng)然應(yīng)該不會(huì)有人對(duì)這類內(nèi)存占用大且不會(huì)被修改的對(duì)象clone。所以,遵循unity暗示的工程實(shí)踐規(guī)范。所有占用大量?jī)?nèi)存且不會(huì)被修改的資源(Asset)不被clone,所有需要修改的邏輯對(duì)象會(huì)被clone出一個(gè)新的實(shí)例。如下圖所示:Instantiate一個(gè)GameObject時(shí),GameObject和Material會(huì)被clone出新的實(shí)例,而貼圖(Texture)則保持引用。引用與非引用資源非引用資源類型:建議使用Instantiate構(gòu)建新對(duì)象。GameObject被Instantiate時(shí),GameObject包含的非引用資源也會(huì)自動(dòng)被Instantiate。GameObjectMaterial引用資源類型:這些對(duì)象,在GameObject被Instantiate時(shí)會(huì)保持引用。MeshTextureShaderAudioClipBytes最佳工程實(shí)踐(Best practice)所有資源(Asset)對(duì)象不再被引用時(shí),AssetBundle才可以被銷毀由于資源(Asset)對(duì)象被銷毀后,無法重復(fù)從AssetBundle中Load出來。因此,必須所
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 污水淤泥處理處置方案
- 餐飲技術(shù)股份合作餐飲文化傳承與發(fā)展協(xié)議范本
- 典型事故搶修方案
- 美德少年考試題及答案
- 水壩災(zāi)情檢測(cè)方案
- 綦江招聘考試題及答案
- 現(xiàn)代自考試題及答案
- 腫瘤的診斷與治療
- 酒店項(xiàng)目保護(hù)方案模板
- 內(nèi)控管理考試題及答案
- 10kV電氣試驗(yàn)方案
- 2022年干部基礎(chǔ)理論知識(shí)應(yīng)知必會(huì)試題-脫貧攻堅(jiān)與鄉(xiāng)村振興有效銜接專題100題
- 心律失常患者護(hù)理
- 新生兒肺動(dòng)脈高壓
- 計(jì)算機(jī)硬件購(gòu)銷合同
- 2019年GJB9001C-2017組織內(nèi)外部環(huán)境因素風(fēng)險(xiǎn)和機(jī)遇識(shí)別評(píng)價(jià)分析及應(yīng)對(duì)措施一覽表備用
- 企業(yè)負(fù)責(zé)人施工現(xiàn)場(chǎng)帶班檢查整改回復(fù)表(含附表)GDAQ10305
- 氬氣安全周知卡
- 《印染行業(yè)定型機(jī)廢氣排放限量》DB330621T059-2022
- 太鋼不銹鋼產(chǎn)品介紹
- 幼兒專注力的個(gè)案培養(yǎng)
評(píng)論
0/150
提交評(píng)論