最近项目模型量比较大,所以我考虑使用动态加载,然后就想到了Assetbundle吗,之前有用过,但是不怎么详细,所以这次项目遇到很多坑,遇到的问题记录一下方便自己和别人,有问题的地方–哈哈菜鸟请轻喷。
先介绍一下环境,也就是ASP.net win 的虚拟主机,配置 一般般挂个网页就可以。
unity我用的版本是5.3f1.
关于打包步骤我就不详细介绍了直接贴代码。
[MenuItem("Custom Editor/Create AssetBunldes ALL")]
static void CreateAssetBunldesALL()
{
Caching.CleanCache();
string Path = "e://all.assetbundle";
Object[] SelectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
foreach (Object obj in SelectedAsset)
{
Debug.Log("Create AssetBunldes name :" + obj);
}
//这里注意第二个参数就行
if (BuildPipeline.BuildAssetBundle(null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies))
{
AssetDatabase.Refresh();
}
else
{
}
}
还是说一下5.0打包依赖 我只是将模型 FBX和材质球在assetbundle勾上 all 后边的还是none
打包完成 是512kb
然后使用Ftp软件 把 这个资源包传到asp.net服务器
然后 回到unity 中 代码加载 。直接上代码
IEnumerator LoadALLGameObject(string path)
{
print(path);
WWW bundle = new WWW("http://www.xxxx.cn/all.assetbundle");
yield return bundle;
if (bundle.isDone)
{
// print(bundle.assetBundle.name);
//通过Prefab的名称把他们都读取出来
Object obj0 = bundle.assetBundle.LoadAsset("pl01", typeof(Object));
// Object obj1 = bundle.assetBundle.LoadAsset("pl02", typeof(Object));
//加载到游戏中
yield return Instantiate(obj0);
// yield return Instantiate(obj1);
bundle.assetBundle.Unload(false);
}
}
效果对比
运行前:
运行后:
总结:
1、在UNITY里点击editor 把HOST url 改成自己服务器的。
2、服务器的MiMe对应要添加