①在AB包中的一个对象/资源,如果使用了另外一个资源,会默认的打到同一个包中。
    ②如果把AB包中一个对象/资源需要用到的一个资源(材质球),放到另外的AB包中,打包一次过后,会发现资源(材质球)丢失。这个时候怎么办呢?
    实际原因:找不到这个材质球!
    解决方案:1.打到同一个AB包中 2.把资源(材质球)的Ab包加载过来

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class ABTest : MonoBehaviour
    5. {
    6. void Start()
    7. {
    8. //关于AB包的依赖:一个资源身上用到了别的AB包中的资源 这个时候 如果只加载自己的Ab包,通过
    9. //它创建对象,会出现资源丢失的情况,这个时候,需要把依赖包一起加载了才能正常
    10. //第一步 加载AB包
    11. AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");
    12. //加载依赖包
    13. AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "material");
    14. //第二部 加载AB包中的资源
    15. GameObject obj = ab.LoadAsset<GameObject>("Cube");//此处利用泛型(Lua不支持泛型)
    16. Instantiate(obj);//实例化
    17. }
    18. }

    问题来了:AB包依赖很多,且不知道AB包依赖了啥怎么办呢?
    依赖包的关键知识点->利用主包,获取依赖信息
    缺点:该AB包只能知道依赖的AB包,却不知道依赖AB包依赖的其他包。

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class ABTest : MonoBehaviour
    5. {
    6. void Start()
    7. {
    8. //关于AB包的依赖:一个资源身上用到了别的AB包中的资源 这个时候 如果只加载自己的Ab包,通过
    9. //它创建对象,会出现资源丢失的情况,这个时候,需要把依赖包一起加载了才能正常
    10. //第一步 加载AB包
    11. AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");
    12. //依赖包的关键知识点->利用主包,获取依赖信息
    13. //加载主包
    14. AssetBundle abMain = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "PC");
    15. //加载主包中的固定文件
    16. AssetBundleManifest abManifest = abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
    17. //从固定文件中 得到依赖信息
    18. string[] strs = abManifest.GetAllDependencies("model");
    19. //得到了 依赖包的名字
    20. for(int i = 0;i<strs.Length;i++)
    21. {
    22. AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + strs[i]);
    23. }
    24. //第二步 加载AB包中的资源
    25. GameObject obj = ab.LoadAsset<GameObject>("Cube");//此处利用泛型(Lua不支持泛型)
    26. Instantiate(obj);//实例化
    27. }
    28. }