您的位置:首页 > 移动开发 > Unity3D

Unity3D热更新<二> 编辑器扩展和打包AssetBundle

2016-03-27 14:45 561 查看
这里是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的时候怎么设置版本号,我还没摸索出来,留着下回再写!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: