/* NIXBuilder.cs Automatically changes the target platform and creates a build. Installation Place in an Editor folder. */ using System; using System.IO; using UnityEditor; public static class NIXBuilder { private const string BundleVersionCodeArgument = "bundleVersionCode"; private const string BuildPathArgument = "buildPath"; private const string DevelopmentBuildArgument = "developmentBuild"; private const string KeyStorePathArgument = "keyStorePath"; private const string KeyStorePasswordArgument = "keyStorePassword"; private const string KeyAliasNameArgument = "keyAliasName"; private const string KeyAliasPasswordArgument = "keyAliasPassword"; public static string[] GetScenePaths() { string[] scenes = new string[EditorBuildSettings.scenes.Length]; for (int i = 0; i < scenes.Length; i++) { scenes[i] = EditorBuildSettings.scenes[i].path; } return scenes; } public static void MakeiOSBuild() { string projectPath = CommandLineReader.GetCustomArgument(BuildPathArgument); CreateFolder(projectPath); BuildTarget buildTarget; #if UNITY_4_6 buildTarget = BuildTarget.iPhone; #else buildTarget = BuildTarget.iOS; #endif EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget); BuildPipeline.BuildPlayer(GetScenePaths(), projectPath, buildTarget, GetBuildOptions()); } public static void MakeAndroidBuild() { string buildPath = CommandLineReader.GetCustomArgument(BuildPathArgument); CreateFolder(Path.GetDirectoryName(buildPath)); var keyStorePath = CommandLineReader.GetCustomArgument(KeyStorePathArgument); PlayerSettings.Android.bundleVersionCode = Convert.ToInt32(CommandLineReader.GetCustomArgument(BundleVersionCodeArgument)); if (File.Exists(keyStorePath)) { PlayerSettings.Android.keystoreName = keyStorePath; PlayerSettings.Android.keystorePass = CommandLineReader.GetCustomArgument(KeyStorePasswordArgument); PlayerSettings.Android.keyaliasName = CommandLineReader.GetCustomArgument(KeyAliasNameArgument); PlayerSettings.Android.keyaliasPass = CommandLineReader.GetCustomArgument(KeyAliasPasswordArgument); } else { PlayerSettings.Android.keystoreName = null; PlayerSettings.Android.keystorePass = null; PlayerSettings.Android.keyaliasName = null; PlayerSettings.Android.keyaliasPass = null; } BuildTarget buildTarget = BuildTarget.Android; EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget); BuildPipeline.BuildPlayer(GetScenePaths(), buildPath, buildTarget, GetBuildOptions()); } public static void MakeWinPhoneBuild() { string projectPath = CommandLineReader.GetCustomArgument(BuildPathArgument); CreateFolder(projectPath); #if UNITY_4_6 BuildTarget buildTarget = BuildTarget.MetroPlayer; EditorUserBuildSettings.metroSDK = MetroSDK.PhoneSDK81; #else BuildTarget buildTarget = BuildTarget.WSAPlayer; EditorUserBuildSettings.wsaSDK = WSASDK.PhoneSDK81; #endif EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget); BuildPipeline.BuildPlayer(GetScenePaths(), projectPath, buildTarget, GetBuildOptions()); } public static void MakeMacOSBuild() { string buildPath = CommandLineReader.GetCustomArgument(BuildPathArgument); CreateFolder(Path.GetDirectoryName(buildPath)); BuildTarget buildTarget = BuildTarget.StandaloneOSXUniversal; EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget); BuildPipeline.BuildPlayer(GetScenePaths(), buildPath, buildTarget, GetBuildOptions()); } public static void CreateFolder(string thePath) { if (!Directory.Exists(thePath)) { Directory.CreateDirectory(thePath); } } public static BuildOptions GetBuildOptions() { BuildOptions buildOptions = BuildOptions.None; if (CommandLineReader.GetCustomArgument(DevelopmentBuildArgument) != null) { buildOptions |= BuildOptions.Development; } return buildOptions; } }