EditorPlayerBuilder.cs 6.3 KB

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