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

本文介绍Unity中5.0版本前AssetBundle的打包方法,并提供了具体代码示例。同时,文中还展示了如何使用UnityEditor扩展进行打包,以及AssetBundle的加载方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是重阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值