EditorPlayerBuilder.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using UnityEditor;
  2. using UnityEngine;
  3. using System;
  4. using System.IO;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. public class BuildForAllPlatforms : EditorWindow
  8. {
  9. private static int versionCode = 1;
  10. private static string version = "1.0.0";
  11. private static string gameName = "MyLovelyGarden";
  12. private static string companyName = "DashGame Technology Inc.";
  13. private static ApiCompatibilityLevel apiCompatLevel = ApiCompatibilityLevel.NET_2_0;
  14. //string path = EditorUtility.SaveFolderPanel("Choose Location of Built Game", "", "");
  15. static string path = "build";
  16. // iOS
  17. private static string iOSBundleIdentifier = "com.dashgame.garden";
  18. private static iOSTargetDevice iOSTargetDev = iOSTargetDevice.iPhoneOnly;
  19. //private static iOSTargetOSVersion iOSTargetVer = iOSTargetOSVersion.iOS_8_0;
  20. // Android
  21. private static string androidBundleIdentifier = "com.dashgame.garden";
  22. private static AndroidSdkVersions androidMinSdk = AndroidSdkVersions.AndroidApiLevel16; // Jellybean;
  23. [MenuItem("DashGame/PlayerBuilder")]
  24. private static void ShowWindow()
  25. {
  26. versionCode = PlayerSettings.Android.bundleVersionCode;
  27. version = PlayerSettings.bundleVersion;
  28. // Get existing open window or if none, make a new one:
  29. BuildForAllPlatforms window = (BuildForAllPlatforms)EditorWindow.GetWindow(typeof(BuildForAllPlatforms), false, "Player Builder");
  30. window.Show();
  31. }
  32. void OnGUI()
  33. {
  34. version = EditorGUILayout.TextField("Version", version);
  35. versionCode = int.Parse(EditorGUILayout.TextField("VersionCode", versionCode.ToString()));
  36. if (GUILayout.Button("Android", GUILayout.Height(30)))
  37. BuildAndroid();
  38. if (GUILayout.Button("iOS", GUILayout.Height(30)))
  39. BuildiOS();
  40. if (GUILayout.Button("iOS Debug", GUILayout.Height(30)))
  41. BuildiOSDebug();
  42. if (GUILayout.Button("Win32", GUILayout.Height(30)))
  43. BuildWin32();
  44. if (GUILayout.Button("OSX 64", GUILayout.Height(30)))
  45. BuildOSX64();
  46. }
  47. public static void BuildWin32()
  48. {
  49. // Get build path
  50. string[] levels = GetLevelPaths();
  51. DGFileUtil.CreateDirectoryWhenNotExists (path + "/win32/");
  52. // Build win32 player.
  53. BuildPipeline.BuildPlayer
  54. (
  55. levels,
  56. path + "/win32/" + gameName + ".exe",
  57. BuildTarget.StandaloneWindows,
  58. BuildOptions.None
  59. );
  60. }
  61. public static void BuildOSX64()
  62. {
  63. // Get build path
  64. string[] levels = GetLevelPaths();
  65. DGFileUtil.CreateDirectoryWhenNotExists (path + "/osx64/");
  66. // Setup settings shared between Android and iOS
  67. // PlayerSettings.bundleVersion = Version;
  68. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  69. PlayerSettings.companyName = companyName;
  70. PlayerSettings.productName = gameName;
  71. // Build osx64 player
  72. BuildPipeline.BuildPlayer
  73. (
  74. levels,
  75. path + "/osx64/" + gameName + ".app",
  76. BuildTarget.StandaloneOSXIntel64,
  77. BuildOptions.None
  78. );
  79. }
  80. public static void BuildiOS()
  81. {
  82. // Get build path
  83. string[] levels = GetLevelPaths();
  84. DGFileUtil.CreateDirectoryWhenNotExists (path + "/ios/");
  85. // Setup settings shared between Android and iOS
  86. // PlayerSettings.bundleVersion = Version;
  87. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  88. // Setup settings for iOS player
  89. PlayerSettings.iPhoneBundleIdentifier = iOSBundleIdentifier;
  90. PlayerSettings.iOS.targetDevice = iOSTargetDev;
  91. //PlayerSettings.iOS.targetOSVersion = iOSTargetVer;
  92. PlayerSettings.iOS.allowHTTPDownload = true;
  93. PlayerSettings.stripEngineCode = true;
  94. PlayerSettings.strippingLevel = StrippingLevel.UseMicroMSCorlib;
  95. // Build iOS player
  96. BuildPipeline.BuildPlayer
  97. (
  98. levels,
  99. path + "/ios/",
  100. BuildTarget.iOS,
  101. BuildOptions.Il2CPP | BuildOptions.AcceptExternalModificationsToPlayer | BuildOptions.SymlinkLibraries
  102. );
  103. }
  104. public static void BuildiOSDebug()
  105. {
  106. // Get build path
  107. string[] levels = GetLevelPaths();
  108. DGFileUtil.CreateDirectoryWhenNotExists (path + "/ios/");
  109. // Setup settings shared between Android and iOS
  110. // PlayerSettings.bundleVersion = Version;
  111. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  112. // Setup settings for iOS player
  113. PlayerSettings.iPhoneBundleIdentifier = iOSBundleIdentifier;
  114. PlayerSettings.iOS.targetDevice = iOSTargetDev;
  115. //PlayerSettings.iOS.targetOSVersion = iOSTargetVer;
  116. PlayerSettings.iOS.allowHTTPDownload = true;
  117. //PlayerSettings.SetPropertyInt( "ScriptingBackend", (int)ScriptingImplementation.Mono2x, BuildTargetGroup.iOS );
  118. // Build iOS player
  119. BuildPipeline.BuildPlayer
  120. (
  121. levels,
  122. path + "/ios/",
  123. BuildTarget.iOS,
  124. BuildOptions.Il2CPP | BuildOptions.Development
  125. |BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.AcceptExternalModificationsToPlayer |
  126. BuildOptions.SymlinkLibraries
  127. );
  128. }
  129. public static void BuildAndroid()
  130. {
  131. // Get build path
  132. string[] levels = GetLevelPaths();
  133. DGFileUtil.CreateDirectoryWhenNotExists (path + "/android/");
  134. // Setup settings shared between Android and iOS
  135. // PlayerSettings.bundleVersion = version;
  136. // PlayerSettings.Android.bundleVersionCode = versionCode;
  137. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  138. // Setup settings for Android player
  139. // PlayerSettings.Android.bundleVersionCode = VersionCode;
  140. PlayerSettings.Android.minSdkVersion = androidMinSdk;
  141. PlayerSettings.Android.androidIsGame = true;
  142. PlayerSettings.bundleIdentifier = androidBundleIdentifier;
  143. PlayerSettings.Android.targetDevice = AndroidTargetDevice.ARMv7;
  144. PlayerSettings.strippingLevel = StrippingLevel.Disabled;
  145. // PlayerSettings.Android.keystoreName = "DashGame.keystore";
  146. // PlayerSettings.Android.keystorePass = "dashabby";
  147. // PlayerSettings.Android.keyaliasName = "DashGame";
  148. // PlayerSettings.Android.keyaliasPass = "dashabby";
  149. // Build Android player
  150. BuildPipeline.BuildPlayer
  151. (
  152. levels,
  153. path + "/android/" + gameName + ".apk",
  154. BuildTarget.Android,
  155. BuildOptions.None
  156. );
  157. }
  158. private static string[] GetLevelPaths()
  159. {
  160. List<string> temp = new List<string>();
  161. foreach (UnityEditor.EditorBuildSettingsScene scene in UnityEditor.EditorBuildSettings.scenes)
  162. {
  163. if (scene.enabled)
  164. {
  165. temp.Add(scene.path);
  166. }
  167. }
  168. return temp.ToArray();
  169. }
  170. }