歡迎加入Unity業內qq交流羣:956187480
qq掃描二維碼加羣
一.AssetBundle簡介
1.什麼是Assetbundle?
它是一個存在於硬盤上的文件。可以稱之爲壓縮包。這個壓縮包可以認爲是一個文件夾,裏面包含了多個文件。這些文件可以分爲兩類:serialized file 和 resource files(序列化文件和源文件)。serialized file:資源被打碎放在一個對象中,最後統一被寫進一個單獨的文件(只有一個);resource files:某些二進制資源(圖片、聲音)被單獨保存,方便快速加載
它是一個AssetBundle對象,我們可以通過代碼從一個特定的壓縮包加載出來的對象。這個對象包含了所有我們當初添加到這個壓縮包裏面的內容,我們可以通過這個對象加載出來使用。
2.Assetbundle的作用?
AssetBundle是Unity引擎提供的一種資源打包方式,可以對除了C#腳本外的任何資源進行打包壓縮處理。
如果想在Unity平臺實現Lua熱更新,Assetbundle技術是無法跳過的知識點,在unity平臺我們進行熱更新下來的資源都是需要事先進行Assetbundle打包處理的。
二.AssetBundle打包流程
1.編輯器擴展編寫
打包過程需要在編輯器模式下進行,所以我們就需要擴展編輯器,也就是不用運行就能執行的邏輯
public class EditorMenu {
[MenuItem("Tool/BuildAssetbundle")]
static void BuildABs()
{
//打包後的資源存放路徑,這個路徑根據項目情況不定
string abDataPath = Application.streamingAssetsPath ;
if (!Directory.Exists(abDataPath)) Directory.CreateDirectory(abDataPath);
//BuildAssetBundle函數後的三個參數分別爲:存儲路徑;壓縮方式;資源目標平臺
var a = BuildPipeline.BuildAssetBundles(abDataPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
EditorUtility.ClearProgressBar();
Debug.Log("AssetBundle打包完畢");
}
}
2.打包類型及打包平臺
BuildAssetBundleOptions
BuildAssetBundleOptions.None:使用LZMA算法壓縮,壓縮的包更小,但是加載時間更長。使用之前需要整體解壓。一旦被解壓,這個包會使用LZ4重新壓縮。使用資源的時候不需要整體解壓。在下載的時候可以使用LZMA算法,一旦它被下載了之後,它會使用LZ4算法保存到本地上。
BuildAssetBundleOptions.UncompressedAssetBundle:不壓縮,包大,加載快
BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4壓縮,壓縮率沒有LZMA高,但是我們可以加載指定資源而不用解壓全部。 注意使用LZ4壓縮,可以獲得可以跟不壓縮想媲美的加載速度,而且比不壓縮文件要小
BuildTarget
Unity具有跨平臺性,所以在打包的時候就要考慮到平臺差異。打包的時候就要選擇合適的平臺類型
3.AssetLables資源標籤
在Unity環境內除了腳本文件,選中任何文件在Inspector面板下都會出現一個AssetLables界面,我們通過這個給資源設置assetbunddle的文件名跟文件後綴。文件名就是打包ab包後的文件名是可以分目錄嵌套的,後綴的話常用的有unity3的,assetbundle,ab等自定義,也可以不設置後綴,在文件名後面加後綴也行。文件名跟後綴都是小寫。
AssetBundle分組策略總結:
a,把經常更新的資源放在一個單獨的包裏面,跟不經常更新的包分離
b,把需要同時加載的資源放在一個包裏面
c,可以把其他包共享的資源放在一個單獨的包裏面
d,把一些需要同時加載的小資源打包成一個包
e,如果對於一個同一個資源有兩個版本,可以考慮通過後綴來區分 v1 v2 v3
4.Manifest文件
打包結束後的資源包由兩部分構成,一個是AssetBundle文件,另一個是Manifest文件
.meta文件是unity內部自動生成的文件可以忽略,manifest文件是專門用於存儲打包後的AssetBundle文件的基本信息的。主要包含以下信息:
CRC校驗碼:類似於MD5,用於計算該資源的一個特殊信息標識
ClassTypes:當前資源關聯使用到了Unity中的哪些類,這些類是以編號索引的形式存在的,每一個編號對應一個類文件
歡迎加入Unity業內qq交流羣:956187480
qq掃描二維碼加羣