BuildHelper.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System.IO;
  2. using System.Linq;
  3. using UnityEditor;
  4. using UnityEditor.Build.Reporting;
  5. using UnityEngine;
  6. namespace ET
  7. {
  8. public static class BuildHelper
  9. {
  10. private const string relativeDirPrefix = "./Release";
  11. public static string BuildFolder = "./Release/{0}/StreamingAssets/";
  12. #if ENABLE_VIEW
  13. [MenuItem("ET/Loader/Remove ENABLE_VIEW", false, ETMenuItemPriority.ChangeDefine)]
  14. public static void RemoveEnableView()
  15. {
  16. EnableDefineSymbols("ENABLE_VIEW", false);
  17. }
  18. #else
  19. [MenuItem("ET/Loader/Add ENABLE_VIEW", false, ETMenuItemPriority.ChangeDefine)]
  20. public static void AddEnableView()
  21. {
  22. EnableDefineSymbols("ENABLE_VIEW", true);
  23. }
  24. #endif
  25. public static void EnableDefineSymbols(string symbols, bool enable)
  26. {
  27. Debug.Log($"EnableDefineSymbols {symbols} {enable}");
  28. string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
  29. var ss = defines.Split(';').ToList();
  30. if (enable)
  31. {
  32. if (ss.Contains(symbols))
  33. {
  34. return;
  35. }
  36. ss.Add(symbols);
  37. }
  38. else
  39. {
  40. if (!ss.Contains(symbols))
  41. {
  42. return;
  43. }
  44. ss.Remove(symbols);
  45. }
  46. Debug.Log($"EnableDefineSymbols {symbols} {enable}");
  47. defines = string.Join(";", ss);
  48. PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, defines);
  49. AssetDatabase.SaveAssets();
  50. AssetDatabase.Refresh();
  51. }
  52. public static void Build(PlatformType type, BuildOptions buildOptions)
  53. {
  54. BuildTarget buildTarget = BuildTarget.StandaloneWindows;
  55. string programName = "ET";
  56. string exeName = programName;
  57. switch (type)
  58. {
  59. case PlatformType.Windows:
  60. buildTarget = BuildTarget.StandaloneWindows64;
  61. exeName += ".exe";
  62. break;
  63. case PlatformType.Android:
  64. buildTarget = BuildTarget.Android;
  65. exeName += ".apk";
  66. break;
  67. case PlatformType.IOS:
  68. buildTarget = BuildTarget.iOS;
  69. break;
  70. case PlatformType.MacOS:
  71. buildTarget = BuildTarget.StandaloneOSX;
  72. break;
  73. case PlatformType.Linux:
  74. buildTarget = BuildTarget.StandaloneLinux64;
  75. break;
  76. case PlatformType.WebGL:
  77. buildTarget = BuildTarget.WebGL;
  78. break;
  79. }
  80. AssetDatabase.Refresh();
  81. Debug.Log("start build");
  82. string[] levels = { "Packages/cn.etetet.loader/Scenes/Init.unity" };
  83. BuildReport report = BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
  84. if (report.summary.result != BuildResult.Succeeded)
  85. {
  86. Debug.Log($"BuildResult:{report.summary.result}");
  87. return;
  88. }
  89. Debug.Log("finish build");
  90. EditorUtility.OpenWithDefaultApp(relativeDirPrefix);
  91. }
  92. }
  93. }