| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEditor; | 
| using System.IO; | 
|   | 
| public class AssetBundleBuildExtersion  | 
| {  | 
|     public static void Build(string _output, string _category, BuildAssetBundleOptions _bundleOption, BuildTarget _buildTarget)  | 
|     {  | 
|         var assetBundles = AssetDatabase.GetAllAssetBundleNames();  | 
|   | 
|         List<string> targetAssetBundles = new List<string>();  | 
|         for (int i = 0; i < assetBundles.Length; i++)  | 
|         {  | 
|             var bundleName = assetBundles[i];  | 
|             if (bundleName.StartsWith(_category))  | 
|             {  | 
|                 targetAssetBundles.Add(bundleName);  | 
|             }  | 
|         }  | 
|   | 
|         var assets = new List<AssetBundleBuild>();  | 
|   | 
|         for (int i = 0; i < targetAssetBundles.Count; i++)  | 
|         {  | 
|             var assetBundleBuild = new AssetBundleBuild();  | 
|             assetBundleBuild.assetBundleName = targetAssetBundles[i];  | 
|             assetBundleBuild.assetNames = AssetDatabase.GetAssetPathsFromAssetBundle(targetAssetBundles[i]);  | 
|             assets.Add(assetBundleBuild);  | 
|         }  | 
|   | 
|         var rootPath = StringUtility.Contact(_output, Path.AltDirectorySeparatorChar, _category);  | 
|         var mainFile = StringUtility.Contact(_output, Path.AltDirectorySeparatorChar, GetMainFestFileName(_buildTarget));  | 
|         var mainFileRename = StringUtility.Contact(_output, Path.AltDirectorySeparatorChar, _category, "_assetbundle");  | 
|         var manifest = StringUtility.Contact(_output, Path.AltDirectorySeparatorChar, GetMainFestFileName(_buildTarget), ".manifest");  | 
|         var manifestRename = StringUtility.Contact(_output, Path.AltDirectorySeparatorChar, _category, "_assetbundle.manifest");  | 
|   | 
|         if (Directory.Exists(rootPath))  | 
|         {  | 
|             Directory.Delete(rootPath, true);  | 
|         }  | 
|   | 
|         Directory.CreateDirectory(rootPath);  | 
|   | 
|         if (File.Exists(mainFileRename))  | 
|         {  | 
|             File.Delete(mainFileRename);  | 
|         }  | 
|   | 
|         if (File.Exists(manifestRename))  | 
|         {  | 
|             File.Delete(manifestRename);  | 
|         }  | 
|   | 
|         BuildPipeline.BuildAssetBundles(_output, assets.ToArray(), _bundleOption, _buildTarget);  | 
|   | 
|         File.Move(mainFile, mainFileRename);  | 
|         File.Move(manifest, manifestRename);  | 
|   | 
|     }  | 
|   | 
|     static string GetMainFestFileName(BuildTarget _target)  | 
|     {  | 
|         switch (_target)  | 
|         {  | 
|             case BuildTarget.StandaloneWindows:  | 
|                 return "standalone";  | 
|             case BuildTarget.Android:  | 
|                 return "android";  | 
|             case BuildTarget.iOS:  | 
|                 return "ios";  | 
|             default:  | 
|                 return string.Empty;  | 
|         }  | 
|     } | 
|   | 
|     [MenuItem("Assets/BuildAssetBundle ( Test )")] | 
|     public static void BuildTest()  | 
|     {  | 
|         if (Selection.activeObject != null) | 
|         { | 
|             var path = AssetDatabase.GetAssetPath(Selection.activeObject);  | 
|             var importer = AssetImporter.GetAtPath(path); | 
|   | 
|             if (importer != null) | 
|             { | 
|                 var ab = importer.assetBundleName; | 
|                 if (!string.IsNullOrEmpty(ab)) | 
|                 {  | 
|   | 
|                     var assetBundles = AssetDatabase.GetAllAssetBundleNames();  | 
|   | 
|                     List<string> targetAssetBundles = new List<string>();  | 
|                     for (int i = 0; i < assetBundles.Length; i++)  | 
|                     {  | 
|                         var bundleName = assetBundles[i];  | 
|                         if (bundleName == ab)  | 
|                         {  | 
|                             targetAssetBundles.Add(bundleName);  | 
|                         }  | 
|                     }  | 
|   | 
|                     var assets = new List<AssetBundleBuild>();  | 
|                     for (int i = 0; i < targetAssetBundles.Count; i++)  | 
|                     {  | 
|                         var assetBundleBuild = new AssetBundleBuild();  | 
|                         assetBundleBuild.assetBundleName = targetAssetBundles[i];  | 
|                         assetBundleBuild.assetNames = AssetDatabase.GetAssetPathsFromAssetBundle(targetAssetBundles[i]);  | 
|                         assets.Add(assetBundleBuild);  | 
|                     }  | 
|   | 
|                     var opt = BuildAssetBundleOptions.None  | 
|                         | BuildAssetBundleOptions.ChunkBasedCompression  | 
|                         | BuildAssetBundleOptions.DeterministicAssetBundle;  | 
|   | 
|                     var dirctory = Application.dataPath + "/BundleTest";  | 
|                     if (!Directory.Exists(dirctory)) | 
|                     { | 
|                         Directory.CreateDirectory(dirctory); | 
|                     }  | 
|                     BuildPipeline.BuildAssetBundles(dirctory, assets.ToArray(), opt, BuildTarget.Android); | 
|                 } | 
|             } | 
|   | 
|         }  | 
|     } | 
|   | 
| } |