①在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);//实例化
}
}