4.AB包的依赖包
4.1 知识点
手动加载AB包的依赖包
创建红色材质球设置到cube上。材质球并没有选择打成哪个AB包。但是AB包窗口中model包自动依赖了红色材质球。
但是假如把红色材质球放到了icon包,那么就不会自动依赖到model包
点击重新生成AB包后,使用AB包同步加载cube,由于model包没有cube需要的材质,材质所在的icon包没有被加载。加载出来的cube会丢失。
AssetBundle modelAssetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");
GameObject cube = modelAssetBundle.LoadAsset("Cube", typeof(GameObject)) as GameObject;
Instantiate(cube);//生成的cube会丢失依赖的材质
加载红色材质球所在的icon包,cube能正常显示了
//加载依赖包
AssetBundle iconlAssetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "icon");
Instantiate(cube);//生成的cube可以正常显示材质
通过主AB包的依赖关系清单文件加载AB包的依赖包
//加载主包 主包的名字和AB包生成路径一样
AssetBundle mainAssetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "PC");
//加载AB包依赖关系清单文件
//AssetBundleManifest是Unity中用于管理AB包依赖关系的类。
AssetBundleManifest assetBundleManifest = mainAssetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//GetAllDependencies方法 传入AB包名得到AB包依赖的所有AB包
string[] modelDependencieAssetBundleNameArray = assetBundleManifest.GetAllDependencies("model");
//遍历依赖的所有AB包
for (int i = 0;i< modelDependencieAssetBundleNameArray.Length;i++)
{
Debug.Log(modelDependencieAssetBundleNameArray[i]);//icon
AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + modelDependencieAssetBundleNameArray[i]);//遍历加载所有依赖的AB包
}
GameObject cube2 = modelAssetBundle.LoadAsset("Cube", typeof(GameObject)) as GameObject;
Instantiate(cube2);//生成的cube因为加载了所需要的所有依赖包 不会丢失材质
4.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson04_AB包的依赖包 : MonoBehaviour
{
void Start()
{
#region 知识点一 手动加载AB包的依赖包
AssetBundle modelAssetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");
GameObject cube = modelAssetBundle.LoadAsset("Cube", typeof(GameObject)) as GameObject;
Instantiate(cube);//生成的cube会丢失依赖的材质
//加载依赖包
//AssetBundle iconlAssetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "icon");
//Instantiate(cube);//生成的cube可以正常显示材质
#endregion
#region 知识点二 通过主AB包的依赖关系清单文件加载AB包的依赖包
//加载主包 主包的名字和AB包生成路径一样
AssetBundle mainAssetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "PC");
//加载AB包依赖关系清单文件
//AssetBundleManifest是Unity中用于管理AB包依赖关系的类。
AssetBundleManifest assetBundleManifest = mainAssetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//GetAllDependencies方法 传入AB包名得到AB包依赖的所有AB包
string[] modelDependencieAssetBundleNameArray = assetBundleManifest.GetAllDependencies("model");
//遍历依赖的所有AB包
for (int i = 0;i< modelDependencieAssetBundleNameArray.Length;i++)
{
Debug.Log(modelDependencieAssetBundleNameArray[i]);//icon
AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + modelDependencieAssetBundleNameArray[i]);//遍历加载所有依赖的AB包
}
GameObject cube2 = modelAssetBundle.LoadAsset("Cube", typeof(GameObject)) as GameObject;
Instantiate(cube2);//生成的cube因为加载了所需要的所有依赖包 不会丢失材质
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com