AssetBundle(一)——AssetBundle介紹

一:什麼是AssetBundle?

Asset(資源) + bundle(捆綁) = AssetBundle(資源打包),一個AssetBundle就是一組資源的集合,簡稱爲AB包。

打包後:它是一個真實存在於硬盤上的文件,可以稱爲壓縮包,裏面可能包含多個文件(AB包中的二進制文件,文件名的後綴必須爲.bytes)——模型,貼圖,材質,預製體,聲音,甚至整個場景,在遊戲運行時被加載出來

這些文件可以分爲兩類:Serialized File(序列化文件)和Resource File(源文件)
Serialized File:資源(預製體,模型.....)被打碎放在同一個對象中,最後統一被寫進一個單獨的文件,最後只有一個文件。
Resource File:某些二進制資源(圖片,聲音.....)被單獨保存,方便快速加載(通常在電腦上可以查看的文件都是源文件,比如聲音,圖片等)

使用時:它是一個AssetBundle對象,我們可以通過代碼從一個特定的壓縮包里加載出來這個AssetBundle對象,這個對象包含了所有我們當初添加到包裏面的內容
二:爲什麼要使用AssetBundle

1.將可以下載的內容放在AssetBundle裏面,在遊戲運行時再被加載,可以減少安裝包(安卓的的APK)的大小。
2.AssetBundle可以實現資源的熱更新。

三:AssetBundle的依賴關係

例如A和B都使用了同一個材質,材質設置的AB包屬性爲material,貼圖設置的AB包屬性爲texture,那麼打包完成後,A和B的包中就不會包含材質資源。

四:解讀AB包中的文件

例如打包一個名字叫cube,後綴名是assetbundle的包。打包後發現文件夾下卻出現四個文件,那麼它們都是什麼呢?

——打包成功後,會爲當前目錄生成一個與目錄名同名的二進制文件和一個與目錄名同名的manifest文件,與目錄名同名的二進制文件(AssetBundles)沒有可讀性,與目錄名同名的manifest文件(AssetBundles.manifest)是一個文本文件可以查看。
——cube.assetbundle的大小爲27kb,它是我們打包的資源。
——剩下最後一個是cube.assetbundle.manifest,每打包一個AssetBundle就會生成一個對應的manifest文件,記錄了這個文件依賴了哪些包。

當前目錄的主manifest文件:(記錄的都是AB包中的路徑)

CRC:校驗碼。
Info:記錄打包當前包的AB包路徑以及自身的依賴關係(例如預製體依賴材質,材質依賴貼圖)。


單獨AB包的manifest文件:

CRC:校驗碼。
Assets:記錄了當前包中每個資源的真實路徑(unity編輯器中的路徑)。
Dependencies:記錄了當前包中資源的依賴關係(AB包中的路徑)。

關於文件校驗:
CRC,MD5,SHA1
相同點:它們都是通過對數據進行計算,生成一個校驗值,該校驗值用來校驗數據的完整性。
不同點:
1.算法不同。
CRC採用多項式除法,MD5和SHA1使用的是替換,輪換等方法。
2.校驗值的長度不同。
CRC校驗值的長度跟多項式有關係,一般爲16位或32位。MD5是16個字節(128位),SHA1是20個字節(160位)。
3.校驗值的稱呼不同。
CRC一般叫做CRC值,MD5和SHA1一般叫做哈希值(Hash)或散列值。
4.安全性不同。
CRC與MD5和SHA1比安全性要弱很多,SHA1的安全性最高。
5.效率不同。
CRC的計算效率最高,MD5和SHA1比較慢。
6.用途不同。
CRC一般用於通信數據的校驗,MD5和SHA1用於安全領域,比如文件校驗,數字簽名等。

五:AssetBundle分組策略

——邏輯實體分組
一個UI界面或者所有UI界面一個包(這個界面裏面的貼圖和佈局信息一個包)
一個角色或者所有角色一個包(這個角色裏面的模型和動畫一個包)
所有場景所共享的部分一個包(包括貼圖和模型)

 

——按照類型分組
所有聲音資源一個包,所有shader一個包,所有模型一個包,所有材質一個包.....

 

——按照使用分組
把在某一個時間內使用的所有資源打成一個包
可以按照關卡分,一個關卡所需要的所有資源包括角色,貼圖,聲音等打成一個包
也可以按照場景分,一個場景所需要的資源打成一個包

 

——把經常更新的資源放在同一個包中,不經常更新的資源與它分離
假如我們有A,B兩個資源,每個資源都是100MB,A經常更新,B不經常更新
如果把A和B打成一個包,那麼更新了A資源之後還是需要下載整個包,則爲200MB
如果將經常更新的A資源與B資源分別打包,則當更新了A資源之後只需要下載更新的A資源包就可以,則爲100MB

 

——把需要同時加載的資源放在同一個包裏
假如我們有A,B兩個資源,它們是需要同時使用的,則把A資源和B資源打成一個包會更方便

 

——把其他包共享的資源放在一個單獨的包裏面。
假如我們有A,B,C三個資源。A和B是預製體,C是一個材質,A和B共享了C的材質。
如果不把材質單獨打包的話,打包時會把A和B依賴的資源同時打進各自的包中,那麼包中的資源會出現重複,增加包的大小。
如果把材質單獨打包的話,A和B去引用C的材質,這樣會避免資源重複打包,減小包的大小


 


——把一些需要同時加載的小資源打包成一個包

 

——如果對於同一個資源有兩個版本,可以通過用後綴名來區分(後綴加上v1,v2.....)
————————————————
版權聲明:本文爲CSDN博主「LLLLL__」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/LLLLL__/article/details/88790486

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章