AB包的依賴
接上一小結。
在這裡我們新建一個紅色材質球,賦值給Cube預製體。此時不對材質球進行AB包分類,再次進行打包。執行指令碼,發現紅色cube成功的從AB包中載入出來。儘管我們沒有將cube所依賴的材質球進行打包分類,但是打包時候unity會自動將包中的物體相關依賴打入包中【圖三所示】。對於所依賴的資源我們如果不進行打包設定,也可以正常使用。
如果還是這個紅色的材質球,需要被其它AB包中的預製體所使用呢?每個AB包裡會預設打入一個材質球顯然有些浪費AB包的空間。
我們可以設定某個公共資源打入到具體的包中,而在載入使用AB包中的資源時候,把此AB包相關依賴的其它AB包也同時載入出來即可滿足使用。也就是說我要載入A資源時候,會檢查A資源依賴的其它資源包(可能是B、C),將ABC同樣載入到記憶體中,這樣在使用A的時候,不會造成資源丟失問題。
private void Awake()
{
//獲取AB包 打包的檔案已經複製到streamingAssets檔案下 從此位置載入
//注意!AB包不能重複載入
ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath +"/"+"model");
_image = GameObject.Find("Canvas/Image").GetComponent<Image>();
//載入主包資源
mainAB = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "StandaloneWindows");
//獲取主包中的儲存的包和包之間的依賴關係
AssetBundleManifest manifest = mainAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//獲取model資源相關的依賴
string[] dependencies = manifest.GetAllDependencies("model");
foreach (var dependency in dependencies)
{
//載入依賴的ab包
AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + dependency);
}
}
其載入的就是AB主包資源中的mainfest檔案,讀取其中儲存的model包的AB包資源依賴,從而將依賴資源所在的AB包也載入到記憶體中。