using System.IO; using System.Linq; using UnityEditor; using UnityEditor.Build.Reporting; using UnityEngine; namespace ET { public static class BuildHelper { private const string relativeDirPrefix = "./Release"; public static string BuildFolder = "./Release/{0}/StreamingAssets/"; #if ENABLE_VIEW [MenuItem("ET/Loader/Remove ENABLE_VIEW", false, ETMenuItemPriority.ChangeDefine)] public static void RemoveEnableView() { EnableDefineSymbols("ENABLE_VIEW", false); } #else [MenuItem("ET/Loader/Add ENABLE_VIEW", false, ETMenuItemPriority.ChangeDefine)] public static void AddEnableView() { EnableDefineSymbols("ENABLE_VIEW", true); } #endif public static void EnableDefineSymbols(string symbols, bool enable) { Debug.Log($"EnableDefineSymbols {symbols} {enable}"); string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); var ss = defines.Split(';').ToList(); if (enable) { if (ss.Contains(symbols)) { return; } ss.Add(symbols); } else { if (!ss.Contains(symbols)) { return; } ss.Remove(symbols); } Debug.Log($"EnableDefineSymbols {symbols} {enable}"); defines = string.Join(";", ss); PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } public static void Build(PlatformType type, BuildOptions buildOptions) { 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; case PlatformType.WebGL: buildTarget = BuildTarget.WebGL; break; } AssetDatabase.Refresh(); Debug.Log("start build"); string[] levels = { "Packages/cn.etetet.loader/Scenes/Init.unity" }; BuildReport report = BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions); if (report.summary.result != BuildResult.Succeeded) { Debug.Log($"BuildResult:{report.summary.result}"); return; } Debug.Log("finish build"); EditorUtility.OpenWithDefaultApp(relativeDirPrefix); } } }