




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、深入理解資源(Asset)與AssetBundleAB包文件Assetbundle文件格式可以理解為,擁有一個列表頭和壓縮數據塊列表。列表頭定義了各數據塊的起始位置和大小。數據塊列表中存儲壓縮過的unity對象的序列化數據。AssetBundle對象加載并創(chuàng)建AssetBundle對象。 Assetbundle對象是一個輕量級對象,只包含一個資源(Asset)對象列表和指向實際AB包數據的文件對象。AB包文件加載完成后存放在內存中,注意只有LZ4能夠以壓縮格式存放在內存中。這段內存不能直接訪問,由AssetBundle對象負責管理。AssetBundle.Unload()會釋放這段內存。Ass
2、et資源實際上unity中并沒有與資源(Asset)這個詞對應的類。我們一般把從AssetBundle中LoadAsset()出來的對象稱為資源 (Asset)。AssetBundle.LoadAsset()等接口從AssetBundle對象中解壓數據反序列化構建Object。Unity完美的序列化機制可以使任何對象都可以直接序列化為連續(xù)內存塊,同樣任何對象都可以通過AssetBundle.LoadAsset()反序列化為結構化對象。AssetBundle.LoadAsset()接口返回類型是Object。此功能也暗示了可以將任何對象從ab包內存中反序列化出來構建。Prefab是什么?創(chuàng)建ab
3、包時,一般會將prefab打入到包中。游戲中通過AssetBundle.LoadAsset()將prefab對象加載出來。代碼1: 再通過加載出來的prefab構建GameObject:代碼 2: 思考:代碼1中m_Prefab是什么?是什么類型?如果是GameObject,那么這個GameObject為什么沒有出現在場景中?如果是GameObject,為什么一定要通過Instantiate再次clone一個GameObject出來?Unity的C+代碼分為兩部分,Runtime和Editor。Runtime中包含引擎的所有核心功能,Editor包含編輯器所需核心功能。Prefab.h/cpp
4、存放于Editor中,實現了編輯器中prefab的功能。Prefab繼承于Object,包含一個指向GameObject的指針。其功能非常簡單,僅僅只是維護編輯器中prefab之間的關聯(lián)關系,用來實現編輯器中prefab修改編輯功能。Prefab只是對GameObject在編輯器中一個功能封裝。上一段源碼:從源碼判斷,Prefab功能非常簡單,只是實現編輯器中各prefab關聯(lián)編輯功能。結論:因此可以推斷,在最終發(fā)布環(huán)境中,并無Prefab對象存在。代碼1中 LoadAsset構建的對象是GameObject,此GameObject并不存在于當前場景(scene)中,而是被unity放到了一個
5、空場景中。LoadAsset構建的GameObject對象,Unity希望我們把它當作資源(asset)使用。對比代碼2中m_Prefab和m_GameObject的scene變量。思考?為什么不能需要構建GameObject時,直接從AssetBundle中反序列化構建呢?推測Unity希望開發(fā)者們遵循的工程實踐是,將AssetBundle中反序列化構建的GameObject作為資源(asset)進行管理。當游戲中需要構建GameObject時,以資源(asset)為基礎構建,而不是從連續(xù)內存上反序列化去構建。從而將對象構建與數據解壓解耦。資源(Asset)資源(Asset)是unity希望
6、開發(fā)者們遵循的一種工程實踐規(guī)范。1. 所有AssetBundle中LoadAsset出來的對象稱為資源(Asset)。2. 資源(Asset)與AssetBundle之間有強耦合關系。3. 資源(Asset)不要直接被使用在業(yè)務邏輯中。資源(Asset)和業(yè)務中創(chuàng)建的對象沒有功能上不同。但在使用方法上有截然不同的區(qū)分。資源(Asset)可以由AssetBundle.Unload(true)統(tǒng)一強制銷毀,也可以單個銷毀。但是對于同一個AssetBundle,LoadAsset出的資源(Asset)只能被銷毀一次,銷毀后再重復LoadAsset()會失敗。Instantiate()英文翻譯為”實例
7、化”,個人覺得這個接口用英文克隆”clone”描述更準確。Object.Instantiate()可以對任何對象clone。包括Texture、Shader、AudioClip,當然應該不會有人對這類內存占用大且不會被修改的對象clone。所以,遵循unity暗示的工程實踐規(guī)范。所有占用大量內存且不會被修改的資源(Asset)不被clone,所有需要修改的邏輯對象會被clone出一個新的實例。如下圖所示:Instantiate一個GameObject時,GameObject和Material會被clone出新的實例,而貼圖(Texture)則保持引用。引用與非引用資源非引用資源類型:建議使用Instantiate構建新對象。GameObject被Instantiate時,GameObject包含的非引用資源也會自動被Instantiate。GameObjectMaterial引用資源類型:這些對象,在GameObject被Instantiate時會保持引用。MeshTextureShaderAudioClipBytes最佳工程實踐(Best practice)所有資源(Asset)對象不再被引用時,AssetBundle才可以被銷毀由于資源(Asset)對象被銷毀后,無法重復從AssetBundle中Load出來。因此,必須所
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效備考市政工程考試攻略試題及答案
- 高效執(zhí)行的2025年工程經濟試題及答案
- 行政管理經濟法課外閱讀材料試題及答案
- 零售行業(yè)智慧門店建設與管理方案
- 分享經驗2025年工程項目管理試題及答案
- 工程投資決策中的市場環(huán)境分析技巧試題及答案
- 應用文寫作考試試題及答案
- 高效會議管理的策略計劃
- 加強自我學習與知識更新的途徑計劃
- 展會營銷與品牌推廣計劃
- (公共政策導論講稿)課件
- 【教學課件】第六章 熟悉而陌生的力 第一節(jié) 力 精品課件
- 國家開放大學(電大)《現代企業(yè)管理》形考、終考及答案
- 你好,無廢校園主題班會
- 廣西建設工程造價咨詢服務行業(yè)收費參考標準
- 安徽省池州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細
- 綜合布線-r4.1-雙絞線鏈路測試
- 圖紙會審會議紀要范本
- GB∕T 17466.1-2019 家用和類似用途固定式電氣裝置的電器附件安裝盒和外殼 第1部分:通用要求
- 鉆探設備工具材料共12
- 得到上市招股書:北京思維造物信息科技股份有限公司
評論
0/150
提交評論