①在AB包中的一个对象/资源,如果使用了另外一个资源,会默认的打到同一个包中。
②如果把AB包中一个对象/资源需要用到的一个资源(材质球),放到另外的AB包中,打包一次过后,会发现资源(材质球)丢失。这个时候怎么办呢?
实际原因:找不到这个材质球!
解决方案:1.打到同一个AB包中 2.把资源(材质球)的Ab包加载过来
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ABTest : MonoBehaviour{void Start(){//关于AB包的依赖:一个资源身上用到了别的AB包中的资源 这个时候 如果只加载自己的Ab包,通过//它创建对象,会出现资源丢失的情况,这个时候,需要把依赖包一起加载了才能正常//第一步 加载AB包AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");//加载依赖包AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "material");//第二部 加载AB包中的资源GameObject obj = ab.LoadAsset<GameObject>("Cube");//此处利用泛型(Lua不支持泛型)Instantiate(obj);//实例化}}
问题来了:AB包依赖很多,且不知道AB包依赖了啥怎么办呢?
依赖包的关键知识点->利用主包,获取依赖信息
缺点:该AB包只能知道依赖的AB包,却不知道依赖AB包依赖的其他包。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ABTest : MonoBehaviour{void Start(){//关于AB包的依赖:一个资源身上用到了别的AB包中的资源 这个时候 如果只加载自己的Ab包,通过//它创建对象,会出现资源丢失的情况,这个时候,需要把依赖包一起加载了才能正常//第一步 加载AB包AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");//依赖包的关键知识点->利用主包,获取依赖信息//加载主包AssetBundle abMain = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "PC");//加载主包中的固定文件AssetBundleManifest abManifest = abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");//从固定文件中 得到依赖信息string[] strs = abManifest.GetAllDependencies("model");//得到了 依赖包的名字for(int i = 0;i<strs.Length;i++){AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + strs[i]);}//第二步 加载AB包中的资源GameObject obj = ab.LoadAsset<GameObject>("Cube");//此处利用泛型(Lua不支持泛型)Instantiate(obj);//实例化}}
