EditorPlayerBuilder.cs 7.1 KB

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