123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using UnityEditor;
- using UnityEngine;
- namespace ET
- {
- public static class BuildHelper
- {
- private const string relativeDirPrefix = "../Release";
- public static string BuildFolder = "../Release/{0}/StreamingAssets/";
-
-
- [InitializeOnLoadMethod]
- public static void ReGenerateProjectFiles()
- {
- if (Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().Name== "RiderScriptEditor")
- {
- FieldInfo generator = Unity.CodeEditor.CodeEditor.CurrentEditor.GetType().GetField("m_ProjectGeneration", BindingFlags.Static | BindingFlags.NonPublic);
- var syncMethod = generator.FieldType.GetMethod("Sync");
- syncMethod.Invoke(generator.GetValue(Unity.CodeEditor.CodeEditor.CurrentEditor), null);
- }
- else
- {
- Unity.CodeEditor.CodeEditor.CurrentEditor.SyncAll();
- }
-
- Debug.Log("ReGenerateProjectFiles finished.");
- }
-
- #if ENABLE_CODES
- [MenuItem("ET/ChangeDefine/Remove ENABLE_CODES")]
- public static void RemoveEnableCodes()
- {
- EnableCodes(false);
- }
- #else
- [MenuItem("ET/ChangeDefine/Add ENABLE_CODES")]
- public static void AddEnableCodes()
- {
- EnableCodes(true);
- }
- #endif
- private static void EnableCodes(bool enable)
- {
- string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
- var ss = defines.Split(';').ToList();
- if (enable)
- {
- if (ss.Contains("ENABLE_CODES"))
- {
- return;
- }
- ss.Add("ENABLE_CODES");
- }
- else
- {
- if (!ss.Contains("ENABLE_CODES"))
- {
- return;
- }
- ss.Remove("ENABLE_CODES");
- }
- defines = string.Join(";", ss);
- PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
- AssetDatabase.SaveAssets();
- }
-
- #if ENABLE_VIEW
- [MenuItem("ET/ChangeDefine/Remove ENABLE_VIEW")]
- public static void RemoveEnableView()
- {
- EnableView(false);
- }
- #else
- [MenuItem("ET/ChangeDefine/Add ENABLE_VIEW")]
- public static void AddEnableView()
- {
- EnableView(true);
- }
- #endif
- private static void EnableView(bool enable)
- {
- string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
- var ss = defines.Split(';').ToList();
- if (enable)
- {
- if (ss.Contains("ENABLE_VIEW"))
- {
- return;
- }
- ss.Add("ENABLE_VIEW");
- }
- else
- {
- if (!ss.Contains("ENABLE_VIEW"))
- {
- return;
- }
- ss.Remove("ENABLE_VIEW");
- }
-
- defines = string.Join(";", ss);
- PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
- AssetDatabase.SaveAssets();
- }
- public static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions, BuildOptions buildOptions, bool isBuildExe, bool isContainAB, bool clearFolder)
- {
- BuildTarget buildTarget = BuildTarget.StandaloneWindows;
- string programName = "ET";
- string exeName = programName;
- switch (type)
- {
- case PlatformType.Windows:
- buildTarget = BuildTarget.StandaloneWindows64;
- exeName += ".exe";
- break;
- case PlatformType.Android:
- buildTarget = BuildTarget.Android;
- exeName += ".apk";
- break;
- case PlatformType.IOS:
- buildTarget = BuildTarget.iOS;
- break;
- case PlatformType.MacOS:
- buildTarget = BuildTarget.StandaloneOSX;
- break;
-
- case PlatformType.Linux:
- buildTarget = BuildTarget.StandaloneLinux64;
- break;
- }
- string fold = string.Format(BuildFolder, type);
- if (clearFolder && Directory.Exists(fold))
- {
- Directory.Delete(fold, true);
- }
- Directory.CreateDirectory(fold);
- UnityEngine.Debug.Log("start build assetbundle");
- BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
- UnityEngine.Debug.Log("finish build assetbundle");
- if (isContainAB)
- {
- FileHelper.CleanDirectory("Assets/StreamingAssets/");
- FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
- }
- if (isBuildExe)
- {
- AssetDatabase.Refresh();
- string[] levels = {
- "Assets/Scenes/Init.unity",
- };
- UnityEngine.Debug.Log("start build exe");
- BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
- UnityEngine.Debug.Log("finish build exe");
- }
- else
- {
- if (isContainAB && type == PlatformType.Windows)
- {
- string targetPath = Path.Combine(relativeDirPrefix, $"{programName}_Data/StreamingAssets/");
- FileHelper.CleanDirectory(targetPath);
- Debug.Log($"src dir: {fold} target: {targetPath}");
- FileHelper.CopyDirectory(fold, targetPath);
- }
- }
- }
- }
- }
|