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