Unity5自动命名Assetbundle并打包

http://www.shihuanjue.com/?p=57

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
 
/// <summary>
/// 把Resource下的资源打包成.unity3d 到StreamingAssets目录下
/// </summary>
public class Builder : Editor
{
	public static string sourcePath = Application.dataPath + "/Resources";
	const string AssetBundlesOutputPath = "Assets/StreamingAssets";
 
	[MenuItem("Tools/AssetBundle/Build")]
	public static void BuildAssetBundle()
	{
		ClearAssetBundlesName ();
 
		Pack (sourcePath);
 
		string outputPath = Path.Combine (AssetBundlesOutputPath,Platform.GetPlatformFolder(EditorUserBuildSettings.activeBuildTarget));
		if (!Directory.Exists (outputPath))
		{
			Directory.CreateDirectory(outputPath);
		}
 
		//根据BuildSetting里面所激活的平台进行打包
		BuildPipeline.BuildAssetBundles (outputPath,0,EditorUserBuildSettings.activeBuildTarget);
 
		AssetDatabase.Refresh ();
 
		Debug.Log ("打包完成");
 
	}
 
	/// <summary>
	/// 清除之前设置过的AssetBundleName,避免产生不必要的资源也打包
	/// 之前说过,只要设置了AssetBundleName的,都会进行打包,不论在什么目录下
	/// </summary>
	static void ClearAssetBundlesName()
	{
		int length = AssetDatabase.GetAllAssetBundleNames ().Length;
		Debug.Log (length);
		string[] oldAssetBundleNames = new string[length];
		for (int i = 0; i < length; i++) 
		{
			oldAssetBundleNames[i] = AssetDatabase.GetAllAssetBundleNames()[i];
		}
 
		for (int j = 0; j < oldAssetBundleNames.Length; j++) 
		{
			AssetDatabase.RemoveAssetBundleName(oldAssetBundleNames[j],true);
		}
		length = AssetDatabase.GetAllAssetBundleNames ().Length;
		Debug.Log (length);
	}
 
	static void Pack(string source)
	{
		DirectoryInfo folder = new DirectoryInfo (source);
		FileSystemInfo[] files = folder.GetFileSystemInfos ();
		int length = files.Length;
		for (int i = 0; i < length; i++) {
			if(files[i] is DirectoryInfo)
			{
				Pack(files[i].FullName);
			}
			else
			{
				if(!files[i].Name.EndsWith(".meta"))
				{
					file (files[i].FullName);
				}
			}
		}
	}
 
	static void file(string source)
	{
		string _source = Replace (source);
		string _assetPath = "Assets" + _source.Substring (Application.dataPath.Length);
		string _assetPath2 = _source.Substring (Application.dataPath.Length + 1);
		//Debug.Log (_assetPath);
 
		//在代码中给资源设置AssetBundleName
		AssetImporter assetImporter = AssetImporter.GetAtPath (_assetPath);
		string assetName = _assetPath2.Substring (_assetPath2.IndexOf("/") + 1);
		assetName = assetName.Replace(Path.GetExtension(assetName),".unity3d");
		//Debug.Log (assetName);
		assetImporter.assetBundleName = assetName;
	}
 
	static string Replace(string s)
	{
		return s.Replace("\\","/");
	}
}
 
public class Platform 
{
	public static string GetPlatformFolder(BuildTarget target)
	{
		switch (target)
		{
		case BuildTarget.Android:
			return "Android";
		case BuildTarget.iOS:
			return "IOS";
		case BuildTarget.WebPlayer:
			return "WebPlayer";
		case BuildTarget.StandaloneWindows:
		case BuildTarget.StandaloneWindows64:
			return "Windows";
		case BuildTarget.StandaloneOSXIntel:
		case BuildTarget.StandaloneOSXIntel64:
		case BuildTarget.StandaloneOSXUniversal:
			return "OSX";
		default:
			return null;
		}
	}
}







本课程总体分为两大部分:理论篇与架构篇AssetBundle架构篇:     1: 讲解Unity原生AssetBundle不适用工程化实战开发的原因与解决方案。     2: 详述AssetBundle框架设计原理图,以及核心设计理念。     3: Untiy编辑器界面全自动化创建AssetBundle打包理念与代码实现。     4: 关于单一AssetBundle包的综合加载与管理以及相应测试实现。     5: AssetBundle整体管理。          本模块包含*.Manifest清单文件读取、AB包之间复杂依赖关系管理、整体场景化自动打包与加载管理流程、项目辅助全局定义与路径管理等 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值