• 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;
    		}
    	}
    }







  • 相关阅读:
    windows 临界区 InitializeCriticalSectionAndSpinCount以及InitializeCriticalSection的区别
    SRWLock 轻量级的读写锁
    QT 遍历获取Form上的控件
    mssql 查询作业执行情况,耗时 等
    C++ builder FMX 遍历窗口所有控件 并 动态消失
    delphi fmx 控件从天上掉下来
    Vue2入门必知必会
    人人开源&项目脚手架&微服务整合
    Spring Security应用到源码分析
    K8S系统学习笔记总览
  • 原文地址:https://www.cnblogs.com/nafio/p/9137398.html
Copyright © 2020-2023  润新知