一、添加AssetBundle Browser
1.新建工程后,打开Packages文件夹,找到manifest文件并打开。
2.添加代码 "com.unity.assetbundlebrowser": "1.7.0",
保存后 Window > AssetBundle Browser 有这个AssetBundle Browser就是成功了。
点开长这样:
3.*低版本也可以在Package Manager中搜索AssetBundle Browser 进行添加;
*还可以在github上下载,解压到package中——https://github.com/Unity-Technologies/AssetBundles-Browser
(我解压到package之后报了3个关于Boo引用丢失的错,就没这样做。QVQ)
二、打包资源
1.先准备一个需要打包的资源(作为测试我把预制体及模型 与材质球及贴图分两个包打包)
前面一个是包名,后面的None是后缀名。在这里先不加。
选择完后AssetBundle Browser界面长这样(五十多M的模型真让人汗颜QAQ)
打包文件夹内容(ABTest是我所存文件夹的名字,他相当与一个大总管,记录所有包和依赖项)
2.打包面板说明
3.简单的使用方法:
——先把要用的包都加载 出来,再从包里拿东西。 这样那样就好辣!
void Start()
{
AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "gongyi");//加载包
AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "gongyiart");//加载依赖包
GameObject obj = ab.LoadAsset<GameObject>("GONGYIPre"); //加载包中要使用的资源 (泛型)
//GameObject obj2 = ab.LoadAsset("GONGYIPre", typeof(GameObject)) as GameObject; //加载包中要使用的资源 (type of)
Instantiate(obj);//生成资源
}
2.进阶的使用方法
思路: 1.先加载主包,从主包中获取需要使用的gongyi包所有的依赖包的名字。
2.通过名字加载所有的依赖包 使用字典管理所有加载的包避免重复加载
3.加载gongyi包
4.从gongyi包中获取需要用到的GONGYIPre进行使用
总结:这个方法可以在只知道需要哪个包的时候,把所有的依赖包加载出来,避免资源丢失
代码:
//定义了一个字典
private Dictionary<string, AssetBundle> abDic = new Dictionary<string, AssetBundle>();
------------------------------------
//获取主包
mainAB = AssetBundle.LoadFromFile(主包所在路径);
//获取AssetBundleManifest
mainfest = mainAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//获取gongyi所有相关依赖包信息
AssetBundle ab = null;
string[] strs = mainfest.GetAllDependencies("gongyi");
for(int i = 0;i <strs.Length;i++)
{ //如果字典中没有(没加载过)
if (!abDic.ContainsKey(strs[i]))
{
ab = AssetBundle.LoadFromFile(路径名 + strs[i]);
abDic.Add(strs[i], ab);
}
}
//加载资源来源包
//加载资源来源包
if (!abDic.ContainsKey("gongyi"))
{
ab = AssetBundle.LoadFromFile(路径名+ "gongyi");
abDic.Add(abName, ab);
}
//异步加载一下
private IEnumerator ReallyLoadAsync(string abName, string resName, UnityAction<object> callBack)
{
yield return StartCoroutine(LoadAB(abName));
//加载AB包
AssetBundleRequest abr = abDic[abName].LoadAssetAsync(resName);
yield return abr;
if (abr.asset is GameObject)
{
callBack(Instantiate(abr.asset));
}
else
{
callBack(abr.asset);
}
//yield return null;
}
三、从网络上加载。
加载http资源会报错 不安全的连接,需要在unity设置一下
Edit -> Project Settings -> Player -> Other Settings -> Configuration -> Allow downloads over HTTP