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, bool rebuild = true)
|
{
|
var assetBundles = AssetDatabase.GetAllAssetBundleNames();
|
var targetAssetBundles = new List<string>();
|
|
if (category == "mobeffectshader")
|
{
|
for (int i = 0; i < assetBundles.Length; i++)
|
{
|
var bundleName = assetBundles[i];
|
if (bundleName.StartsWith("gmodels") || bundleName.StartsWith("effect") || bundleName.StartsWith("graphic"))
|
{
|
targetAssetBundles.Add(bundleName);
|
}
|
}
|
}
|
else
|
{
|
for (int i = 0; i < assetBundles.Length; i++)
|
{
|
var bundleName = assetBundles[i];
|
if (bundleName.StartsWith(category))
|
{
|
targetAssetBundles.Add(bundleName);
|
}
|
}
|
}
|
|
if (targetAssetBundles.Count == 0)
|
return;
|
|
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 (rebuild && Directory.Exists(rootPath))
|
Directory.Delete(rootPath, true);
|
|
// if (!Directory.Exists(rootPath))
|
// Directory.CreateDirectory(rootPath);
|
|
if (File.Exists(mainFileRename))
|
{
|
File.Delete(mainFileRename);
|
}
|
|
if (File.Exists(manifestRename))
|
{
|
File.Delete(manifestRename);
|
}
|
|
BuildPipeline.BuildAssetBundles(output, assets.ToArray(), bundleOption, buildTarget);
|
|
if (File.Exists(mainFile))
|
File.Move(mainFile, mainFileRename);
|
if (File.Exists(manifest))
|
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);
|
}
|
}
|
|
}
|
}
|
|
}
|