【Unity_AssetBundle】(四)什么是依赖?怎样加载依赖包?

1.什么是依赖?

概念:
在包中的一个对象资源,如果关联了另一个对象资源
会自动把另一个资源打在同一个包中

例:
现有一个Cube:在这里插入图片描述
已经把他打入名为“model”的AB包中
现在为Cube创建一个材质球在这里插入图片描述关联给Cube
打开AB包查看器:
可以看到,材质球并没有手动打入model的AB包中
但他自动关联进去了
在这里插入图片描述

2.依赖包

概念:
一个资源身上用到了别的AB包中的资源
这时,如果只加载资源自己的AB包,会出现资源丢失
此时需要把依赖包也一起加载!

那么问题来了
如果这个资源的依赖包非常多, 我不知道都用了哪个包里的资源呢?
这时就要利用"主包"来获取依赖信息
在这里插入图片描述

现在把材质球打进一个新包"material"中去
而"model"包中的Cube需要用到此材质球
也就是说 material包是model包的依赖包
在这里插入图片描述

public class ABTest : MonoBehaviour
{
    
    
    void Start()
    {
    
    
        //第一步:加载model包
        AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath +  "/" + "model");

        //第二步:加载依赖包信息
        //  1.加载主包
        AssetBundle abMain =  AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "PC");
        //  2.加载主包中的固定文件
        //      (固定写法,死死记住即可)
        AssetBundleManifest abMainfest =  abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
        //  3.从固定文件中得到依赖信息
        //      (想得到哪个包的依赖信息 就把哪个包的包名传入)
        string[] strs = abMainfest.GetAllDependencies("model");

        //第三步:加载依赖包
        for (int i = 0; i < strs.Length; i++)
        {
    
    
            print("model的依赖包有:" + strs[i]);
            AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" +  strs[i]);
        }

        //实例化Cube,看是否有材质
        Instantiate(ab.LoadAsset<GameObject>("Cube"));
    }
}

运行:材质正常加载了
在这里插入图片描述在这里插入图片描述

补充
这个方法有小缺点
只能找到这个"包"依赖了哪些包,包中的所有资源都会参与寻找
而不是找到某个特定"资源"依赖了哪些包

用文本编辑器打开主包配置文件,可以看到此特性
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SEA_0825/article/details/127253708