168 lines
5.0 KiB
C#
168 lines
5.0 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using UnityEditor;
|
|||
|
|
using System.IO;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public class AssetBundleBuilder : EditorWindow
|
|||
|
|
{
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/Windows/<2F><>Դ<EFBFBD><D4B4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>")]
|
|||
|
|
public static void BuildAbsAndScenesWindows()
|
|||
|
|
{
|
|||
|
|
AssetBundleBuilder assetBundleBuilder = EditorWindow.GetWindow<AssetBundleBuilder>();
|
|||
|
|
assetBundleBuilder.Show();
|
|||
|
|
}
|
|||
|
|
static string outPath;
|
|||
|
|
|
|||
|
|
static AssetBundleBuilder()
|
|||
|
|
{
|
|||
|
|
outPath = "Assets/StreamingAssets/Bundles/";
|
|||
|
|
}
|
|||
|
|
private void OnGUI()
|
|||
|
|
{
|
|||
|
|
GUILayout.Space(10);
|
|||
|
|
GUI.skin.label.fontSize = 12;
|
|||
|
|
GUI.skin.label.alignment = TextAnchor.MiddleLeft;
|
|||
|
|
GUILayout.Label("AssetBundle<6C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>:", GUILayout.MaxWidth(160));
|
|||
|
|
outPath = EditorGUILayout.TextField(outPath);
|
|||
|
|
EditorGUI.EndDisabledGroup();
|
|||
|
|
|
|||
|
|
//string s = EditorGUILayout.TextArea("s");
|
|||
|
|
if (GUILayout.Button("<22><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ"))
|
|||
|
|
{
|
|||
|
|
BuildAbsAndScenes(BuildTarget.StandaloneWindows);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//GUILayout.EndVertical();
|
|||
|
|
|
|||
|
|
//EndWindows();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/Android/<2F><>Դ<EFBFBD><D4B4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>")]
|
|||
|
|
public static void BuildAbsAndScenesAndroid()
|
|||
|
|
{
|
|||
|
|
BuildAbsAndScenes(BuildTarget.Android);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/IOS/<2F><>Դ<EFBFBD><D4B4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>")]
|
|||
|
|
public static void BuildAbsAndScenesIOS()
|
|||
|
|
{
|
|||
|
|
BuildAbsAndScenes(BuildTarget.iOS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/WebGL/<2F><>Դ<EFBFBD><D4B4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>")]
|
|||
|
|
public static void BuildAbsAndScenesWebGL()
|
|||
|
|
{
|
|||
|
|
BuildAbsAndScenes(BuildTarget.WebGL);
|
|||
|
|
}
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/Windows/<2F><>Դ<EFBFBD><D4B4>")]
|
|||
|
|
public static void BuildAbsWindows()
|
|||
|
|
{
|
|||
|
|
BuildAssetBundles(BuildTarget.StandaloneWindows);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/Android/<2F><>Դ<EFBFBD><D4B4>")]
|
|||
|
|
public static void BuildAbsAndroid()
|
|||
|
|
{
|
|||
|
|
BuildAssetBundles(BuildTarget.Android);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/IOS/<2F><>Դ<EFBFBD><D4B4>")]
|
|||
|
|
public static void BuildAbsIOS()
|
|||
|
|
{
|
|||
|
|
BuildAssetBundles(BuildTarget.iOS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/WebGL/<2F><>Դ<EFBFBD><D4B4>")]
|
|||
|
|
public static void BuildAbsWebGL()
|
|||
|
|
{
|
|||
|
|
BuildAssetBundles(BuildTarget.WebGL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/Windows/<2F><><EFBFBD><EFBFBD>")]
|
|||
|
|
public static void BuildScenesWindows()
|
|||
|
|
{
|
|||
|
|
BuildScenes(BuildTarget.StandaloneWindows);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/Android/<2F><><EFBFBD><EFBFBD>")]
|
|||
|
|
public static void BuildScenesAndroid()
|
|||
|
|
{
|
|||
|
|
BuildScenes(BuildTarget.Android);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/IOS/<2F><><EFBFBD><EFBFBD>")]
|
|||
|
|
public static void BuildScenesIOS()
|
|||
|
|
{
|
|||
|
|
BuildScenes(BuildTarget.iOS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[MenuItem("<22><><EFBFBD><EFBFBD>/WebGL/<2F><><EFBFBD><EFBFBD>")]
|
|||
|
|
public static void BuildScenesWebGL()
|
|||
|
|
{
|
|||
|
|
BuildScenes(BuildTarget.WebGL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>AssetBundle<6C><65>Scenes
|
|||
|
|
public static void BuildAbsAndScenes(BuildTarget platform)
|
|||
|
|
{
|
|||
|
|
BuildAssetBundles(platform);
|
|||
|
|
BuildScenes(platform);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>AssetBundles
|
|||
|
|
private static void BuildAssetBundles(BuildTarget platform)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
//string outPath = Application.streamingAssetsPath + "/Abs";
|
|||
|
|
if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath);
|
|||
|
|
EditorUtility.DisplayProgressBar("<22><>Ϣ", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>", 0f);
|
|||
|
|
BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.DeterministicAssetBundle, platform);
|
|||
|
|
AssetDatabase.Refresh();
|
|||
|
|
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Scenes
|
|||
|
|
private static void BuildScenes(BuildTarget platform)
|
|||
|
|
{
|
|||
|
|
// ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
string scenePath = Application.dataPath + "/AbResources/Scenes";
|
|||
|
|
//string outPath = Application.streamingAssetsPath + "/Abs/";
|
|||
|
|
|
|||
|
|
if (Directory.Exists(scenePath))
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
|
if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ŀ¼<C4BF>µij<C2B5><C4B3><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
string[] scenes = GetAllFiles(scenePath, "*.unity");
|
|||
|
|
for (int i = 0; i < scenes.Length; i++)
|
|||
|
|
{
|
|||
|
|
string url = scenes[i].Replace("\\", "/");
|
|||
|
|
int index = url.LastIndexOf("/");
|
|||
|
|
string scene = url.Substring(index + 1, url.Length - index - 1);
|
|||
|
|
string msg = string.Format("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{0}", scene);
|
|||
|
|
EditorUtility.DisplayProgressBar("<22><>Ϣ", msg, 0f);
|
|||
|
|
scene = scene.Replace(".unity", ".scene");
|
|||
|
|
Debug.Log(string.Format("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{0}<7D><>{1}", url, outPath + scene));
|
|||
|
|
BuildPipeline.BuildPlayer(scenes, outPath + scene, BuildTarget.StandaloneWindows, BuildOptions.BuildAdditionalStreamedScenes);
|
|||
|
|
AssetDatabase.Refresh();
|
|||
|
|
}
|
|||
|
|
EditorUtility.ClearProgressBar();
|
|||
|
|
Debug.Log("<22><><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary> <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC>к<EFBFBD><D0BA><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> </summary>
|
|||
|
|
private static string[] GetAllFiles(string directory, params string[] types)
|
|||
|
|
{
|
|||
|
|
if (!Directory.Exists(directory)) return new string[0];
|
|||
|
|
string searchTypes = (types == null || types.Length == 0) ? "*.*" : string.Join("|", types);
|
|||
|
|
string[] names = Directory.GetFiles(directory, searchTypes, SearchOption.AllDirectories);
|
|||
|
|
return names;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|