Skip to main content
 首页 » 资源教程 » Unity3D教程

关于在Unity中打包AssetBundle文件

2016年09月03日 15:24:559640

在项目制作中,对于数量角度的资源或者再资源优化的时候,我们最常用的方法就是打包Ab文件,下面给出打包的具体方法:

降下面的脚本放到Editor文件夹中即可:


using UnityEngine;
using System.Collections;
using UnityEditor;

public class ModelPackage: Editor
{
	
	//打包单个
	[MenuItem("Custom Editor/Create AssetBunldes WebPlayer")]
	static void CreateAssetBunldesWebPlayer ()
	{
		//获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
		
		//遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) {
			string webPlayertargetPath = Application.dataPath + "/StreamingAssets/WebPlayer/" + obj.name + ".assetbundle";			
			if (BuildPipeline.BuildAssetBundle (obj, null, webPlayertargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.WebPlayer)) {
				Debug.Log (obj.name + ",webPlayer资源打包成功");
			} else {
				Debug.Log (obj.name + ",webPlaye资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();			
	}	
	//打包单个
	[MenuItem("Custom Editor/Create AssetBunldes PC")]
	static void CreateAssetBunldesPC ()
	{
		//获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
		
		//遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) {
			string pctargetPath = Application.streamingAssetsPath + "/PC/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, pctargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.StandaloneWindows)) {
				Debug.Log (obj.name + ",pc资源打包成功");
			} else {
				Debug.Log (obj.name + ",pc资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();			
	}
	
	//打包单个
	[MenuItem("Custom Editor/Create AssetBunldes Android")]
	static void CreateAssetBunldesAndroid ()
	{
		//获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
		
		//遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) {
			string androidtargetPath = Application.dataPath + "/StreamingAssets/Android/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, androidtargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android)) {
				Debug.Log (obj.name + ",Android资源打包成功");
			} else {
				Debug.Log (obj.name + ",Android资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();			
	}
	
	//打包单个
	[MenuItem("Custom Editor/Create AssetBunldes IOS")]
	static void CreateAssetBunldesIOS ()
	{
		//获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
		
		//遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) {
			string iPhonetargetPath = Application.dataPath + "/StreamingAssets/IOS/" + obj.name + ".assetbundle";			
			if (BuildPipeline.BuildAssetBundle (obj, null, iPhonetargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.iPhone)) {
				Debug.Log (obj.name + ",iPhone资源打包成功");
			} else {
				Debug.Log (obj.name + ",iPhone资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();			
	}
	
	
	
	//打包单个
	[MenuItem("Custom Editor/Create AssetBunldes Main")]
	static void CreateAssetBunldesMain ()
	{
		//获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
		
		//遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) {
			//本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径
			//StreamingAssets是只读路径,不能写入
			//服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
			string webPlayertargetPath = Application.dataPath + "/StreamingAssets/WebPlayer/" + obj.name + ".assetbundle";			
			if (BuildPipeline.BuildAssetBundle (obj, null, webPlayertargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.WebPlayer)) {
				Debug.Log (obj.name + ",webPlayer资源打包成功");
			} else {
				Debug.Log (obj.name + ",webPlaye资源打包失败");
			}
			
			string androidtargetPath = Application.dataPath + "/StreamingAssets/Android/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, androidtargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.Android)) {
				Debug.Log (obj.name + ",Android资源打包成功");
			} else {
				Debug.Log (obj.name + ",Android资源打包失败");
			}
			
			string iPhonetargetPath = Application.dataPath + "/StreamingAssets/IOS/" + obj.name + ".assetbundle";			
			if (BuildPipeline.BuildAssetBundle (obj, null, iPhonetargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.iPhone)) {
				Debug.Log (obj.name + ",iPhone资源打包成功");
			} else {
				Debug.Log (obj.name + ",iPhone资源打包失败");
			}
			
			string pctargetPath = Application.streamingAssetsPath + "/PC/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, pctargetPath, BuildAssetBundleOptions.CollectDependencies, BuildTarget.StandaloneWindows)) {
				Debug.Log (obj.name + ",pc资源打包成功");
			} else {
				Debug.Log (obj.name + ",pc资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();	
		
	}
	
	[MenuItem("Custom Editor/Create AssetBunldes ALL")]
	static void CreateAssetBunldesALL ()
	{
		
		Caching.CleanCache ();
		
		
		string Path = Application.dataPath + "/StreamingAssets/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 {
			
		}
	}
	
	[MenuItem("Custom Editor/Create Scene")]
	static void CreateSceneALL ()
	{
		//清空一下缓存
		Caching.CleanCache ();
		string Path = Application.dataPath + "/MyScene.unity3d";
		string  [] levels = {"Assets/Level.unity"};
		//打包场景
		BuildPipeline.BuildPlayer (levels, Path, BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
		AssetDatabase.Refresh ();
	}
	
}



打包完成的文件保存在streamingAssets文件夹中,再通过www加载即可。

评论列表暂无评论
发表评论