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

这里是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的时候怎么设置版本号,我还没摸索出来,留着下回再写!

你可能感兴趣的:(Lua热更新)