EditorPlayerBuilder.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. UpdateInfo();
  61. OpenFolder(path + "/win32");
  62. }
  63. public static void BuildOSX64()
  64. {
  65. // Get build path
  66. string[] levels = GetLevelPaths();
  67. DGFileUtil.CreateDirectoryWhenNotExists (path + "/osx64/");
  68. // Setup settings shared between Android and iOS
  69. // PlayerSettings.bundleVersion = Version;
  70. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  71. PlayerSettings.companyName = companyName;
  72. PlayerSettings.productName = gameName;
  73. // Build osx64 player
  74. BuildPipeline.BuildPlayer
  75. (
  76. levels,
  77. path + "/osx64/" + gameName + ".app",
  78. BuildTarget.StandaloneOSXIntel64,
  79. BuildOptions.None
  80. );
  81. UpdateInfo();
  82. OpenFolder(path + "/osx64");
  83. }
  84. public static void BuildiOS()
  85. {
  86. // Get build path
  87. string[] levels = GetLevelPaths();
  88. DGFileUtil.CreateDirectoryWhenNotExists (path + "/ios/");
  89. // Setup settings shared between Android and iOS
  90. // PlayerSettings.bundleVersion = Version;
  91. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  92. // Setup settings for iOS player
  93. PlayerSettings.iPhoneBundleIdentifier = iOSBundleIdentifier;
  94. PlayerSettings.iOS.targetDevice = iOSTargetDev;
  95. //PlayerSettings.iOS.targetOSVersion = iOSTargetVer;
  96. PlayerSettings.iOS.allowHTTPDownload = true;
  97. PlayerSettings.stripEngineCode = true;
  98. PlayerSettings.strippingLevel = StrippingLevel.UseMicroMSCorlib;
  99. // Build iOS player
  100. BuildPipeline.BuildPlayer
  101. (
  102. levels,
  103. path + "/ios/",
  104. BuildTarget.iOS,
  105. BuildOptions.Il2CPP | BuildOptions.AcceptExternalModificationsToPlayer | BuildOptions.SymlinkLibraries
  106. );
  107. UpdateInfo();
  108. OpenFolder(path + "/ios");
  109. }
  110. public static void BuildiOSDebug()
  111. {
  112. // Get build path
  113. string[] levels = GetLevelPaths();
  114. DGFileUtil.CreateDirectoryWhenNotExists (path + "/ios/");
  115. // Setup settings shared between Android and iOS
  116. // PlayerSettings.bundleVersion = Version;
  117. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  118. // Setup settings for iOS player
  119. PlayerSettings.iPhoneBundleIdentifier = iOSBundleIdentifier;
  120. PlayerSettings.iOS.targetDevice = iOSTargetDev;
  121. //PlayerSettings.iOS.targetOSVersion = iOSTargetVer;
  122. PlayerSettings.iOS.allowHTTPDownload = true;
  123. //PlayerSettings.SetPropertyInt( "ScriptingBackend", (int)ScriptingImplementation.Mono2x, BuildTargetGroup.iOS );
  124. // Build iOS player
  125. BuildPipeline.BuildPlayer
  126. (
  127. levels,
  128. path + "/ios/",
  129. BuildTarget.iOS,
  130. BuildOptions.Il2CPP | BuildOptions.Development
  131. |BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.AcceptExternalModificationsToPlayer |
  132. BuildOptions.SymlinkLibraries
  133. );
  134. UpdateInfo();
  135. OpenFolder(path + "/ios");
  136. }
  137. public static void BuildAndroid()
  138. {
  139. // Get build path
  140. string[] levels = GetLevelPaths();
  141. DGFileUtil.CreateDirectoryWhenNotExists (path + "/android/");
  142. // Setup settings shared between Android and iOS
  143. // PlayerSettings.bundleVersion = version;
  144. // PlayerSettings.Android.bundleVersionCode = versionCode;
  145. PlayerSettings.apiCompatibilityLevel = apiCompatLevel;
  146. // Setup settings for Android player
  147. // PlayerSettings.Android.bundleVersionCode = VersionCode;
  148. PlayerSettings.Android.minSdkVersion = androidMinSdk;
  149. PlayerSettings.Android.androidIsGame = true;
  150. PlayerSettings.bundleIdentifier = androidBundleIdentifier;
  151. PlayerSettings.Android.targetDevice = AndroidTargetDevice.ARMv7;
  152. PlayerSettings.strippingLevel = StrippingLevel.Disabled;
  153. // PlayerSettings.Android.keystoreName = "DashGame.keystore";
  154. // PlayerSettings.Android.keystorePass = "dashabby";
  155. // PlayerSettings.Android.keyaliasName = "DashGame";
  156. // PlayerSettings.Android.keyaliasPass = "dashabby";
  157. // Build Android player
  158. BuildPipeline.BuildPlayer
  159. (
  160. levels,
  161. path + "/android/" + gameName + ".apk",
  162. BuildTarget.Android,
  163. BuildOptions.None
  164. );
  165. UpdateInfo();
  166. OpenFolder(path + "/android");
  167. }
  168. private static string[] GetLevelPaths()
  169. {
  170. List<string> temp = new List<string>();
  171. foreach (UnityEditor.EditorBuildSettingsScene scene in UnityEditor.EditorBuildSettings.scenes)
  172. {
  173. if (scene.enabled)
  174. {
  175. temp.Add(scene.path);
  176. }
  177. }
  178. return temp.ToArray();
  179. }
  180. private static void UpdateInfo(){
  181. PlayerSettings.Android.bundleVersionCode = versionCode;
  182. PlayerSettings.bundleVersion = version;
  183. }
  184. private static void OpenFolder(string dir){
  185. Application.OpenURL(dir);
  186. }
  187. void OnInspectorUpdate()
  188. {
  189. versionCode = PlayerSettings.Android.bundleVersionCode;
  190. version = PlayerSettings.bundleVersion;
  191. this.Repaint();
  192. }
  193. }