using UnityEditor; using UnityEngine; using System; using System.IO; using System.Collections; using System.Collections.Generic; public class BuildForAllPlatforms : EditorWindow { private static PayChannel PayChannel; private static int versionCode = 1; private static string version = "1.0.0"; private static string gameName = "MyLovelyGarden"; private static string companyName = "DashGame Technology Inc."; private static ApiCompatibilityLevel apiCompatLevel = ApiCompatibilityLevel.NET_2_0; //string path = EditorUtility.SaveFolderPanel("Choose Location of Built Game", "", ""); static string path = "build"; // iOS private static string iOSBundleIdentifier = "com.dashgame.garden"; private static iOSTargetDevice iOSTargetDev = iOSTargetDevice.iPhoneOnly; //private static iOSTargetOSVersion iOSTargetVer = iOSTargetOSVersion.iOS_8_0; // Android private static string androidBundleIdentifier = "com.dashgame.garden"; private static AndroidSdkVersions androidMinSdk = AndroidSdkVersions.AndroidApiLevel16; // Jellybean; [MenuItem("DashGame/PlayerBuilder")] private static void ShowWindow() { versionCode = PlayerSettings.Android.bundleVersionCode; version = PlayerSettings.bundleVersion; // Get existing open window or if none, make a new one: BuildForAllPlatforms window = (BuildForAllPlatforms)EditorWindow.GetWindow(typeof(BuildForAllPlatforms), false, "Player Builder"); window.Show(); } void OnGUI() { version = EditorGUILayout.TextField("Version", version); versionCode = int.Parse(EditorGUILayout.TextField("VersionCode", versionCode.ToString())); PayChannel = (PayChannel) EditorGUILayout.EnumPopup(PayChannel); if (PayChannel == PayChannel.AliPay) { File.WriteAllText(Application.dataPath + "/Script/Editor/Setting.txt", "AliPay"); } else if (PayChannel == PayChannel.UnityIAP) { File.WriteAllText(Application.dataPath + "/Script/Editor/Setting.txt", "UnityIAP"); } if (GUILayout.Button("Android", GUILayout.Height(30))) BuildAndroid(); if (GUILayout.Button("iOS", GUILayout.Height(30))) BuildiOS(); if (GUILayout.Button("iOS Debug", GUILayout.Height(30))) BuildiOSDebug(); if (GUILayout.Button("Win32", GUILayout.Height(30))) BuildWin32(); if (GUILayout.Button("OSX 64", GUILayout.Height(30))) BuildOSX64(); } public static void BuildWin32() { // Get build path string[] levels = GetLevelPaths(); DGFileUtil.CreateDirectoryWhenNotExists (path + "/win32/"); // Build win32 player. BuildPipeline.BuildPlayer ( levels, path + "/win32/" + gameName + ".exe", BuildTarget.StandaloneWindows, BuildOptions.None ); UpdateInfo(); OpenFolder(path + "/win32"); } public static void BuildOSX64() { // Get build path string[] levels = GetLevelPaths(); DGFileUtil.CreateDirectoryWhenNotExists (path + "/osx64/"); // Setup settings shared between Android and iOS // PlayerSettings.bundleVersion = Version; PlayerSettings.apiCompatibilityLevel = apiCompatLevel; PlayerSettings.companyName = companyName; PlayerSettings.productName = gameName; // Build osx64 player BuildPipeline.BuildPlayer ( levels, path + "/osx64/" + gameName + ".app", BuildTarget.StandaloneOSXIntel64, BuildOptions.None ); UpdateInfo(); OpenFolder(path + "/osx64"); } public static void BuildiOS() { // Get build path string[] levels = GetLevelPaths(); DGFileUtil.CreateDirectoryWhenNotExists (path + "/ios/"); // Setup settings shared between Android and iOS // PlayerSettings.bundleVersion = Version; PlayerSettings.apiCompatibilityLevel = apiCompatLevel; // Setup settings for iOS player PlayerSettings.iPhoneBundleIdentifier = iOSBundleIdentifier; PlayerSettings.iOS.targetDevice = iOSTargetDev; //PlayerSettings.iOS.targetOSVersion = iOSTargetVer; PlayerSettings.iOS.allowHTTPDownload = true; PlayerSettings.stripEngineCode = true; PlayerSettings.strippingLevel = StrippingLevel.UseMicroMSCorlib; // Build iOS player BuildPipeline.BuildPlayer ( levels, path + "/ios/", BuildTarget.iOS, BuildOptions.Il2CPP | BuildOptions.AcceptExternalModificationsToPlayer | BuildOptions.SymlinkLibraries ); UpdateInfo(); OpenFolder(path + "/ios"); } public static void BuildiOSDebug() { // Get build path string[] levels = GetLevelPaths(); DGFileUtil.CreateDirectoryWhenNotExists (path + "/ios/"); // Setup settings shared between Android and iOS // PlayerSettings.bundleVersion = Version; PlayerSettings.apiCompatibilityLevel = apiCompatLevel; // Setup settings for iOS player PlayerSettings.iPhoneBundleIdentifier = iOSBundleIdentifier; PlayerSettings.iOS.targetDevice = iOSTargetDev; //PlayerSettings.iOS.targetOSVersion = iOSTargetVer; PlayerSettings.iOS.allowHTTPDownload = true; //PlayerSettings.SetPropertyInt( "ScriptingBackend", (int)ScriptingImplementation.Mono2x, BuildTargetGroup.iOS ); // Build iOS player BuildPipeline.BuildPlayer ( levels, path + "/ios/", BuildTarget.iOS, BuildOptions.Il2CPP | BuildOptions.Development |BuildOptions.AllowDebugging | BuildOptions.ConnectWithProfiler | BuildOptions.AcceptExternalModificationsToPlayer | BuildOptions.SymlinkLibraries ); UpdateInfo(); OpenFolder(path + "/ios"); } public static void BuildAndroid() { // Get build path string[] levels = GetLevelPaths(); DGFileUtil.CreateDirectoryWhenNotExists (path + "/android/"); // Setup settings shared between Android and iOS // PlayerSettings.bundleVersion = version; // PlayerSettings.Android.bundleVersionCode = versionCode; PlayerSettings.apiCompatibilityLevel = apiCompatLevel; // Setup settings for Android player // PlayerSettings.Android.bundleVersionCode = VersionCode; PlayerSettings.Android.minSdkVersion = androidMinSdk; PlayerSettings.Android.androidIsGame = true; PlayerSettings.bundleIdentifier = androidBundleIdentifier; PlayerSettings.Android.targetDevice = AndroidTargetDevice.ARMv7; PlayerSettings.strippingLevel = StrippingLevel.Disabled; // PlayerSettings.Android.keystoreName = "DashGame.keystore"; // PlayerSettings.Android.keystorePass = "dashabby"; // PlayerSettings.Android.keyaliasName = "DashGame"; // PlayerSettings.Android.keyaliasPass = "dashabby"; // Build Android player BuildPipeline.BuildPlayer ( levels, path + "/android/" + gameName + ".apk", BuildTarget.Android, BuildOptions.None ); UpdateInfo(); OpenFolder(path + "/android"); } private static string[] GetLevelPaths() { List temp = new List(); foreach (UnityEditor.EditorBuildSettingsScene scene in UnityEditor.EditorBuildSettings.scenes) { if (scene.enabled) { temp.Add(scene.path); } } return temp.ToArray(); } private static void UpdateInfo(){ PlayerSettings.Android.bundleVersionCode = versionCode; PlayerSettings.bundleVersion = version; } private static void OpenFolder(string dir){ Application.OpenURL(dir); } void OnInspectorUpdate() { versionCode = PlayerSettings.Android.bundleVersionCode; version = PlayerSettings.bundleVersion; this.Repaint(); } }