这里是5.0以前的打包方法,5.0以后不太一样,但是还没有研究5.0的打包方法,所以先写上。BuildPipeline.BuildAssetBundle 这个创建AssetBundle的方法在5.0中已经过时了。
http://www.cnblogs.com/tekkaman/p/4040081.html 这篇文章可以先看看。
顺带着学习了一下编辑器扩展,蛮简单的。
主要用到了这几个API :
EditorUtility.SaveFilePanel 保存文件窗口
Selection.GetFiltered 筛选得到选择物体
BuildPipeline.BuildAssetBundle 创建AssetBundle
EditorUtility.DisplayDialog 弹出消息框
AssetDatabase.Refresh 刷新有更新的资源
以下是老版本打包代码:
using UnityEngine;
using System.Collections;
using UnityEditor; //编辑器扩展 要导入UnityEditor命名空间
public class ExportAssetBundleBySelection : MonoBehaviour {
//5.0以前打包 AssetBundle
//编辑器菜单显示路径
[MenuItem("Assets/讲选择的资源打包成AssetBundle")]
//方法必须是静态
static void myWindow()
{ //保存文件对话框 返回路径 //标题栏 //默认目录文件夹 //默认名 //默认文件后缀名
string path= EditorUtility.SaveFilePanel("保存AssetBundle文件","Assets/Bundle","new AssetBundle","AssetBundle");
//如果路径长度不为0
if(path.Length!=0)
{ //得到选择的文件数组 //限定文件类型 底层文件
Object[] selectionObject = Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets);
//创建AssetBundle |是按位或操作符 两边都会进行计算 //激活选择的物体 物体数组 路径 AssetBundle参数 目标平台
bool isDone= BuildPipeline.BuildAssetBundle(Selection.activeObject, selectionObject, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, BuildTarget.StandaloneWindows);
//如果打包成功 弹出完成提示对话框
if(isDone)
{
EditorUtility.DisplayDialog("AssetBundle","资源打包成功","确定");
}
//刷新资源
AssetDatabase.Refresh();
}
}
}
加载AssetBundle
void Start (){
StartCoroutine(wwwLoad());
StartCoroutine(wwwDownload ());
}
//这种方法不会保存缓存 每次都会重新下载
IEnumerator wwwLoad()
{ //实例化一个WWW(地址)
WWW www=new WWW (@"file:///C:/Users/Administrator/Desktop/AssetBundle/aaa.AssetBundle");
//等待下载完
yield return www;
//根据prefab的名字读取资源
Instantiate(www.assetBundle.LoadAsset("Cube"));
//释放assetBundle内存镜像
www.assetBundle.Unload(false);
AssetDatabase.Refresh();
}
//WWW.LoadFromCacheOrDownload缓存文件地址 C:\Documents and Settings\Administrator\Local Settings\Application Data\Unity\WebPlayer\Cache DefaultCompany_XX XX是工程的名字
IEnumerator wwwDownload()
{ //声明一个WWW(地址,版本号) 如果有缓存不下载 如果缓存版本不是最新会下载更新
WWW www=WWW.LoadFromCacheOrDownload (@"file:///C:/Users/Administrator/Desktop/AssetBundle/aaa.AssetBundle" ,1);
//等待下载完
yield return www;
//根据prefab的名字读取资源
Instantiate(www.assetBundle.LoadAsset("Cube"));
//释放assetBundle内存镜像
www.assetBundle.Unload(false);
//清楚下载的缓存文件
Caching.CleanCache();
//设置最大缓存容量,如果超过,会释放老缓存来存放新的缓存
Caching.maximumAvailableDiskSpace =200 *1024*1024;
}
生成AssetBundle的时候怎么设置版本号,我还没摸索出来,留着下回再写!