Advertisement
freakrho

CBuilder.cs

Jun 27th, 2018
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 37.91 KB | None | 0 0
  1. using RhoTools.Android;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEditor;
  5. #if UNITY_2017_0_OR_NEWER
  6. using UnityEditor.Build.Reporting;
  7. #endif
  8. using UnityEngine;
  9.  
  10. namespace RhoTools
  11. {
  12.     public class CBuilder : EditorWindow
  13.     {
  14.         const string MENU = "File/";
  15.         const string CBUILDER = "CBuilder";
  16.         const string BUILDS_PATH = CBUILDER + "BuildsPath";
  17.         const string FILENAME = CBUILDER + "BuildFilename";
  18.         const string WIN_BUILD_NUMBER = CBUILDER + "WindowsBuildNumber";
  19.         const string LINUX_BUILD_NUMBER = CBUILDER + "LinuxBuildNumber";
  20.         const string BUILD_WIN_32 = CBUILDER + "BuildWin32";
  21.         const string BUILD_WIN_64 = CBUILDER + "BuildWin64";
  22.         const string BUILD_LINUX_32 = CBUILDER + "BuildLinux32";
  23.         const string BUILD_LINUX_64 = CBUILDER + "BuildLinux64";
  24.         const string BUILD_LINUX_UNIVERSAL = CBUILDER + "BuildLinuxUniversal";
  25.         const string BUILD_OSX_32 = CBUILDER + "BuildOSX32";
  26.         const string BUILD_OSX_64 = CBUILDER + "BuildOSX64";
  27.         const string BUILD_OSX_UNIVERSAL = CBUILDER + "BuildOSXUniversal";
  28.         const string BUILD_ANDROID = CBUILDER + "BuildAndroid";
  29.         const string BUILD_IOS = CBUILDER + "BuildIOS";
  30.         const string RUN_ANDROID = CBUILDER + "RunAndroid";
  31.         const string ANDROID_KEYSTORE_PASS = CBUILDER + "AndroidKeystorePass";
  32.         const string ANDROID_KEYALIAS_PASS = CBUILDER + "AndroidKeyAliasPass";
  33.         const string START_WITH_CURRENT = CBUILDER + "StartWithCurrent";
  34.         const string END_WITH_CURRENT = CBUILDER + "EndWithCurrent";
  35.         const string SWITCH_TO_CURRENT = CBUILDER + "SwitchToCurrent";
  36.         const string DEFAULT_BUILDS_PATH = "Builds";
  37.         const string BUILD_64 = "_x86_64";
  38.         const string BUILD_UNIVERSAL = "Universal";
  39.         const string BUILD_DIR_WINDOWS = "/Windows";
  40.         const string BUILD_DIR_LINUX = "/Linux";
  41.         const string BUILD_DIR_OSX = "/OSX";
  42.         const string BUILD_DIR_ANDROID = "/Android";
  43.         const string BUILD_DIR_IOS = "/iOS";
  44.  
  45.         #region EditorPrefs
  46.         public static string BuildPath
  47.         {
  48.             get
  49.             {
  50.                 return EditorProjectPrefs.GetString(BUILDS_PATH, DEFAULT_BUILDS_PATH);
  51.             }
  52.             set { EditorProjectPrefs.SetString(BUILDS_PATH, value); }
  53.         }
  54.  
  55.         public static string FileName
  56.         {
  57.             get
  58.             {
  59.                 return EditorProjectPrefs.GetString(FILENAME,
  60.                     PlayerSettings.productName);
  61.             }
  62.             set { EditorProjectPrefs.SetString(FILENAME, value); }
  63.         }
  64.  
  65.         public static int WindowsBuildNumber
  66.         {
  67.             get { return EditorProjectPrefs.GetInt(WIN_BUILD_NUMBER, 0); }
  68.             set { EditorProjectPrefs.SetInt(WIN_BUILD_NUMBER, value); }
  69.         }
  70.  
  71.         public static int LinuxBuildNumber
  72.         {
  73.             get { return EditorProjectPrefs.GetInt(LINUX_BUILD_NUMBER, 0); }
  74.             set { EditorProjectPrefs.SetInt(LINUX_BUILD_NUMBER, value); }
  75.         }
  76.  
  77.         public static int OSXBuildNumber
  78.         {
  79.             get
  80.             {
  81.                 int tVersion = 0;
  82.                 int.TryParse(PlayerSettings.macOS.buildNumber, out tVersion);
  83.                 return tVersion;
  84.             }
  85.             set
  86.             {
  87.                 PlayerSettings.macOS.buildNumber = value.ToString();
  88.             }
  89.         }
  90.  
  91.         public static int IOSBuildNumber
  92.         {
  93.             get
  94.             {
  95.                 int tVersion = 0;
  96.                 int.TryParse(PlayerSettings.iOS.buildNumber, out tVersion);
  97.                 return tVersion;
  98.             }
  99.             set
  100.             {
  101.                 PlayerSettings.iOS.buildNumber = value.ToString();
  102.             }
  103.         }
  104.  
  105.         public static string AndroidKeyAliasPass
  106.         {
  107.             get { return EditorProjectPrefs.GetString(ANDROID_KEYALIAS_PASS, PlayerSettings.Android.keyaliasPass); }
  108.             set { EditorProjectPrefs.SetString(ANDROID_KEYALIAS_PASS, value); }
  109.         }
  110.         public static string AndroidKeyStorePass
  111.         {
  112.             get { return EditorProjectPrefs.GetString(ANDROID_KEYSTORE_PASS, PlayerSettings.Android.keystorePass); }
  113.             set { EditorProjectPrefs.SetString(ANDROID_KEYSTORE_PASS, value); }
  114.         }
  115.  
  116.         // Bools
  117.         public static bool BuildWin32
  118.         {
  119.             get { return EditorProjectPrefs.GetBool(BUILD_WIN_32, true); }
  120.             set { EditorProjectPrefs.SetBool(BUILD_WIN_32, value); }
  121.         }
  122.         public static bool BuildWin64
  123.         {
  124.             get { return EditorProjectPrefs.GetBool(BUILD_WIN_64, false); }
  125.             set { EditorProjectPrefs.SetBool(BUILD_WIN_64, value); }
  126.         }
  127.         public static bool BuildLinux32
  128.         {
  129.             get { return EditorProjectPrefs.GetBool(BUILD_LINUX_32, true); }
  130.             set { EditorProjectPrefs.SetBool(BUILD_LINUX_32, value); }
  131.         }
  132.         public static bool BuildLinux64
  133.         {
  134.             get { return EditorProjectPrefs.GetBool(BUILD_LINUX_64, false); }
  135.             set { EditorProjectPrefs.SetBool(BUILD_LINUX_64, value); }
  136.         }
  137.         public static bool BuildLinuxUniversal
  138.         {
  139.             get { return EditorProjectPrefs.GetBool(BUILD_LINUX_UNIVERSAL, false); }
  140.             set { EditorProjectPrefs.SetBool(BUILD_LINUX_UNIVERSAL, value); }
  141.         }
  142.         public static bool BuildOSX32
  143.         {
  144.             get { return EditorProjectPrefs.GetBool(BUILD_OSX_32, true); }
  145.             set { EditorProjectPrefs.SetBool(BUILD_OSX_32, value); }
  146.         }
  147.         public static bool BuildOSX64
  148.         {
  149.             get { return EditorProjectPrefs.GetBool(BUILD_OSX_64, false); }
  150.             set { EditorProjectPrefs.SetBool(BUILD_OSX_64, value); }
  151.         }
  152.         public static bool BuildOSXUniversal
  153.         {
  154.             get { return EditorProjectPrefs.GetBool(BUILD_OSX_UNIVERSAL, false); }
  155.             set { EditorProjectPrefs.SetBool(BUILD_OSX_UNIVERSAL, value); }
  156.         }
  157.         public static bool BuildAndroid
  158.         {
  159.             get { return EditorProjectPrefs.GetBool(BUILD_ANDROID, true); }
  160.             set { EditorProjectPrefs.SetBool(BUILD_ANDROID, value); }
  161.         }
  162.         public static bool BuildIOS
  163.         {
  164.             get { return EditorProjectPrefs.GetBool(BUILD_IOS, true); }
  165.             set { EditorProjectPrefs.SetBool(BUILD_IOS, value); }
  166.         }
  167.         public static bool RunAndroid
  168.         {
  169.             get { return EditorProjectPrefs.GetBool(RUN_ANDROID, true); }
  170.             set { EditorProjectPrefs.SetBool(RUN_ANDROID, value); }
  171.         }
  172.         public static bool StartWithCurrent
  173.         {
  174.             get { return EditorProjectPrefs.GetBool(START_WITH_CURRENT, true); }
  175.             set { EditorProjectPrefs.SetBool(START_WITH_CURRENT, value); }
  176.         }
  177.         public static bool EndWithCurrent
  178.         {
  179.             get { return EditorProjectPrefs.GetBool(END_WITH_CURRENT, false); }
  180.             set { EditorProjectPrefs.SetBool(END_WITH_CURRENT, value); }
  181.         }
  182.         public static bool SwitchToCurrent
  183.         {
  184.             get { return EditorProjectPrefs.GetBool(SWITCH_TO_CURRENT, true); }
  185.             set { EditorProjectPrefs.SetBool(SWITCH_TO_CURRENT, value); }
  186.         }
  187.         #endregion
  188.  
  189.         static Vector2 m_ScrollPos;
  190.         static string m_DataPath;
  191.         static string DataPath
  192.         {
  193.             get
  194.             {
  195.                 if (string.IsNullOrEmpty(m_DataPath))
  196.                     m_DataPath = Application.dataPath.Substring(0, Application.dataPath.Length - "/Assets".Length);
  197.                 return m_DataPath;
  198.             }
  199.         }
  200.         GUIStyle m_AreaStyle;
  201.         GUIStyle AreaStyle
  202.         {
  203.             get
  204.             {
  205.                 if (m_AreaStyle == null)
  206.                 {
  207.                     m_AreaStyle = new GUIStyle(EditorStyles.helpBox);
  208.                 }
  209.                 return m_AreaStyle;
  210.             }
  211.         }
  212.         GUIStyle m_SelectedAreaStyle;
  213.         GUIStyle SelectedAreaStyle
  214.         {
  215.             get
  216.             {
  217.                 if (m_SelectedAreaStyle == null)
  218.                 {
  219.                     m_SelectedAreaStyle = new GUIStyle(AreaStyle);
  220.                     Texture2D tBackground = new Texture2D(1, 1);
  221.                     tBackground.SetPixel(0, 0, new Color(0.423f, 0.498f, 0.431f));
  222.                     tBackground.Apply();
  223.                     m_SelectedAreaStyle.normal.background = tBackground;
  224.                 }
  225.                 if (m_SelectedAreaStyle.normal.background == null)
  226.                 {
  227.                     Texture2D tBackground = new Texture2D(1, 1);
  228.                     tBackground.SetPixel(0, 0, new Color(0.423f, 0.498f, 0.431f));
  229.                     tBackground.Apply();
  230.                 }
  231.                 return m_SelectedAreaStyle;
  232.             }
  233.         }
  234.  
  235.         [MenuItem(MENU + "Builder settings...")]
  236.         public static void ShowWindow()
  237.         {
  238.             GetWindow<CBuilder>();
  239.         }
  240.  
  241.         private void OnGUI()
  242.         {
  243.             System.Action<bool> tBuildFunction = null;
  244.             bool tDevelopment = false;
  245.  
  246.             EditorGUI.BeginChangeCheck();
  247.             GUIContent tContent = new GUIContent("Builds root dir",
  248.                 "All builds will be saved in subfolders of this directory");
  249.             string tBuildPath = CEditorGUILayout.DirPathField(tContent, DataPath + "/" + BuildPath,
  250.                 "Select a root directory for all the builds", DataPath + "/" + DEFAULT_BUILDS_PATH);
  251.  
  252.             tContent.text = "Build filename";
  253.             tContent.tooltip = "All builds will be saved with this filename";
  254.             FileName = EditorGUILayout.TextField(tContent, FileName);
  255.  
  256.             PlayerSettings.bundleVersion = EditorGUILayout.TextField(
  257.                 "Version", PlayerSettings.bundleVersion);
  258.  
  259.             bool tStartWithCurrent = GUILayout.Toggle(StartWithCurrent, "Start with current platform");
  260.             bool tEndWithCurrent = GUILayout.Toggle(EndWithCurrent, "End with current platform");
  261.             if (tStartWithCurrent && tEndWithCurrent)
  262.             {
  263.                 if (!StartWithCurrent)
  264.                     tEndWithCurrent = false;
  265.                 else if (!EndWithCurrent)
  266.                     tStartWithCurrent = false;
  267.             }
  268.             SwitchToCurrent = GUILayout.Toggle(SwitchToCurrent, "Switch to current platform when done");
  269.            
  270.             m_ScrollPos = GUILayout.BeginScrollView(m_ScrollPos);
  271.             GUILayout.Label("Standalone", EditorStyles.boldLabel);
  272.  
  273.             int tColumn0 = 70;
  274.             int tColumn1 = 70;
  275.             int tColumn1Half = tColumn1 / 2;
  276.  
  277.             // WINDOWS
  278.             GUILayout.BeginVertical(
  279.                 EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows ? SelectedAreaStyle : AreaStyle);
  280.             GUILayout.BeginHorizontal();
  281.             if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.StandaloneWindows)
  282.             {
  283.                 if (GUILayout.Button("Windows", GUILayout.MaxWidth(tColumn0)))
  284. #if UNITY_2017_0_OR_NEWER
  285.                     EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.Standalone,
  286.                         BuildTarget.StandaloneWindows);
  287. #else
  288.                     EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,
  289.                         BuildTarget.StandaloneWindows);
  290. #endif
  291.             }
  292.             else
  293.                 GUILayout.Label("Windows", GUILayout.MaxWidth(tColumn0));
  294.             GUILayout.Label("Build:", GUILayout.MaxWidth(tColumn1Half));
  295.             int tWindowsBuild = EditorGUILayout.IntField(WindowsBuildNumber, GUILayout.MaxWidth(tColumn1Half));
  296.             if (GUILayout.Button("Build"))
  297.             {
  298.                 tBuildFunction = BuildGameWindows;
  299.             }
  300.             if (GUILayout.Button("Development build"))
  301.                 BuildGameWindows(true);
  302.             GUILayout.EndHorizontal();
  303.             EditorGUI.indentLevel++;
  304.             BuildWin32 = EditorGUILayout.Toggle("Build 32 bit version", BuildWin32);
  305.             BuildWin64 = EditorGUILayout.Toggle("Build 64 bit version", BuildWin64);
  306.             EditorGUI.indentLevel--;
  307.             GUILayout.EndVertical();
  308.  
  309.             // LINUX
  310.             GUILayout.BeginVertical(
  311.                 EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux ? SelectedAreaStyle : AreaStyle);
  312.             GUILayout.BeginHorizontal();
  313.             if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.StandaloneLinux)
  314.             {
  315.                 if (GUILayout.Button("Linux", GUILayout.MaxWidth(tColumn0)))
  316. #if UNITY_2017_0_OR_NEWER
  317.                     EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.Standalone,
  318.                         BuildTarget.StandaloneLinux);
  319. #else
  320.                     EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,
  321.                         BuildTarget.StandaloneLinux);
  322. #endif
  323.             }
  324.             else
  325.                 GUILayout.Label("Linux", GUILayout.MaxWidth(tColumn0));
  326.             GUILayout.Label("Build:", GUILayout.MaxWidth(tColumn1Half));
  327.             int tLinuxBuild = EditorGUILayout.IntField(LinuxBuildNumber, GUILayout.MaxWidth(tColumn1Half));
  328.             if (GUILayout.Button("Build"))
  329.             {
  330.                 tBuildFunction = BuildGameLinux;
  331.                 tDevelopment = false;
  332.             }
  333.             if (GUILayout.Button("Development build"))
  334.             {
  335.                 tBuildFunction = BuildGameLinux;
  336.                 tDevelopment = true;
  337.             }
  338.             GUILayout.EndHorizontal();
  339.             EditorGUI.indentLevel++;
  340.             BuildLinux32 = EditorGUILayout.Toggle("Build 32 bit version", BuildLinux32);
  341.             BuildLinux64 = EditorGUILayout.Toggle("Build 64 bit version", BuildLinux64);
  342.             BuildLinuxUniversal = EditorGUILayout.Toggle("Build universal version", BuildLinuxUniversal);
  343.             EditorGUI.indentLevel--;
  344.             GUILayout.EndVertical();
  345.  
  346.             // OSX
  347.             GUILayout.BeginVertical(
  348.                 TargetIsOSX(EditorUserBuildSettings.activeBuildTarget) ? SelectedAreaStyle : AreaStyle);
  349.             GUILayout.BeginHorizontal();
  350.             if (TargetIsOSX(EditorUserBuildSettings.activeBuildTarget))
  351.             {
  352.                 if (GUILayout.Button("OSX", GUILayout.MaxWidth(tColumn0)))
  353. #if UNITY_2017_0_OR_NEWER
  354.                     EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.Standalone,
  355.                         BuildTarget.StandaloneOSX);
  356. #else
  357.                     EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,
  358.                         BuildTarget.StandaloneOSXUniversal);
  359. #endif
  360.             }
  361.             else
  362.                 GUILayout.Label("OSX", GUILayout.MaxWidth(tColumn0));
  363.             GUILayout.Label("Build:", GUILayout.MaxWidth(tColumn1Half));
  364.             int tOSXBuild = EditorGUILayout.IntField(OSXBuildNumber, GUILayout.MaxWidth(tColumn1Half));
  365.             if (GUILayout.Button("Build"))
  366.             {
  367.                 tBuildFunction = BuildGameOSX;
  368.                 tDevelopment = false;
  369.             }
  370.             if (GUILayout.Button("Development build"))
  371.             {
  372.                 tBuildFunction = BuildGameOSX;
  373.                 tDevelopment = true;
  374.             }
  375.             GUILayout.EndHorizontal();
  376.             EditorGUI.indentLevel++;
  377.             BuildOSX32 = EditorGUILayout.Toggle("Build 32 bit version", BuildOSX32);
  378.             BuildOSX64 = EditorGUILayout.Toggle("Build 64 bit version", BuildOSX64);
  379.             BuildOSXUniversal = EditorGUILayout.Toggle("Build universal version", BuildOSXUniversal);
  380.             EditorGUI.indentLevel--;
  381.             GUILayout.EndVertical();
  382.  
  383.             GUILayout.Label("Mobile", EditorStyles.boldLabel);
  384.  
  385.             // ANDROID
  386.             GUILayout.BeginVertical(
  387.                 EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android ? SelectedAreaStyle : AreaStyle);
  388.             GUILayout.BeginHorizontal();
  389.             if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android)
  390.             {
  391.                 if (GUILayout.Button("Android", GUILayout.MaxWidth(tColumn0)))
  392. #if UNITY_2017_0_OR_NEWER
  393.                     EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.Android,
  394.                         BuildTarget.Android);
  395. #else
  396.                     EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android,
  397.                         BuildTarget.Android);
  398. #endif
  399.             }
  400.             else
  401.                 GUILayout.Label("Android", EditorStyles.boldLabel, GUILayout.MaxWidth(tColumn0));
  402.             GUILayout.Label("Build:", GUILayout.MaxWidth(tColumn1Half));
  403.             PlayerSettings.Android.bundleVersionCode = EditorGUILayout.IntField(
  404.                     PlayerSettings.Android.bundleVersionCode, GUILayout.MaxWidth(tColumn1Half));
  405.             if (GUILayout.Button("Build"))
  406.             {
  407.                 BuildAndroid = true;
  408.                 tBuildFunction = BuildGameAndroid;
  409.                 tDevelopment = false;
  410.             }
  411.             if (GUILayout.Button("Development build"))
  412.             {
  413.                 BuildAndroid = true;
  414.                 tBuildFunction = BuildGameAndroid;
  415.                 tDevelopment = true;
  416.             }
  417.             GUILayout.EndHorizontal();
  418.             EditorGUI.indentLevel++;
  419.             BuildAndroid = EditorGUILayout.Toggle("Build android version", BuildAndroid);
  420.             GUILayout.BeginHorizontal();
  421.             RunAndroid = EditorGUILayout.Toggle("Install and run on device", RunAndroid);
  422.             if (GUILayout.Button("Install last version"))
  423.                 AET.InstallLastBuild();
  424.             GUILayout.EndHorizontal();
  425.             string tAndroiddentifier = EditorGUILayout.TextField("Bundle identifier",
  426.                 PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.Android));
  427.             AndroidKeyStorePass = EditorGUILayout.TextField("Keystore password", AndroidKeyStorePass);
  428.             AndroidKeyAliasPass = EditorGUILayout.TextField("Key alias password", AndroidKeyAliasPass);
  429.             EditorGUI.indentLevel--;
  430.             GUILayout.EndVertical();
  431.  
  432.             // IOS
  433.             GUILayout.BeginVertical(
  434.                 EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS ? SelectedAreaStyle : AreaStyle);
  435.             GUILayout.BeginHorizontal();
  436.             if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.iOS)
  437.             {
  438.                 if (GUILayout.Button("iOS", GUILayout.MaxWidth(tColumn0)))
  439. #if UNITY_2017_0_OR_NEWER
  440.                     EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.iOS,
  441.                         BuildTarget.iOS);
  442. #else
  443.                     EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS,
  444.                         BuildTarget.iOS);
  445. #endif
  446.             }
  447.             else
  448.                 GUILayout.Label("iOS", EditorStyles.boldLabel, GUILayout.MaxWidth(tColumn0));
  449.             GUILayout.Label("Build:", GUILayout.MaxWidth(tColumn1Half));
  450.             IOSBuildNumber = EditorGUILayout.IntField(
  451.                     IOSBuildNumber, GUILayout.MaxWidth(tColumn1Half));
  452.             if (GUILayout.Button("Build"))
  453.             {
  454.                 BuildIOS = true;
  455.                 tBuildFunction = BuildGameIOS;
  456.                 tDevelopment = false;
  457.                 PlayerSettings.iOS.sdkVersion =iOSSdkVersion.DeviceSDK;
  458.             }
  459.             if (GUILayout.Button("Development build"))
  460.             {
  461.                 BuildIOS = true;
  462.                 tBuildFunction = BuildGameIOS;
  463.                 tDevelopment = true;
  464.                 PlayerSettings.iOS.sdkVersion =iOSSdkVersion.DeviceSDK;
  465.             }
  466.             if (GUILayout.Button("Simulator build"))
  467.             {
  468.                 BuildIOS = true;
  469.                 tBuildFunction = BuildGameIOS;
  470.                 tDevelopment = true;
  471.                 PlayerSettings.iOS.sdkVersion =iOSSdkVersion.SimulatorSDK;
  472.             }
  473.             GUILayout.EndHorizontal();
  474.             EditorGUI.indentLevel++;
  475.             BuildIOS = EditorGUILayout.Toggle("Build iOS version", BuildIOS);
  476.             string tIOSIdentifier = EditorGUILayout.TextField("Bundle identifier",
  477.                 PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.iOS));
  478.             EditorGUI.indentLevel--;
  479.             GUILayout.EndVertical();
  480.  
  481.             if (EditorGUI.EndChangeCheck())
  482.             {
  483.                 StartWithCurrent = tStartWithCurrent;
  484.                 EndWithCurrent = tEndWithCurrent;
  485.                 BuildPath = IO.GetRelativePath(tBuildPath, DataPath);
  486.                 WindowsBuildNumber = tWindowsBuild;
  487.                 LinuxBuildNumber = tLinuxBuild;
  488.                 OSXBuildNumber = tOSXBuild;
  489.                 PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, tAndroiddentifier);
  490.                 PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, tIOSIdentifier);
  491.                 EditorProjectPrefs.Save();
  492.             }
  493.             GUILayout.EndScrollView();
  494.             // Buttons
  495.             GUILayout.BeginHorizontal();
  496.             if (GUILayout.Button("Player settings"))
  497.             {
  498.                 EditorApplication.ExecuteMenuItem("Edit/Project Settings/Player");
  499.             }
  500.             if (GUILayout.Button("Build settings"))
  501.             {
  502. #if UNITY_2017_0_OR_NEWER
  503.                 GetWindow<BuildPlayerWindow>();
  504. #else
  505.                 EditorApplication.ExecuteMenuItem("File/Build Settings...");
  506. #endif
  507.             }
  508.             if (GUILayout.Button("Build ALL"))
  509.             {
  510.                 tBuildFunction = BuildGameAll;
  511.                 tDevelopment = false;
  512.             }
  513.             if (GUILayout.Button("Build ALL development"))
  514.             {
  515.                 tBuildFunction = BuildGameAll;
  516.                 tDevelopment = true;
  517.             }
  518.             GUILayout.EndHorizontal();
  519.  
  520.             if (tBuildFunction != null)
  521.             {
  522.                 tBuildFunction(tDevelopment);
  523.             }
  524.         }
  525.  
  526.         public static void BuildGameAll(bool aDevelopment)
  527.         {
  528.             List<System.Action<bool>> tBuildOrder = new List<System.Action<bool>>
  529.             {
  530.                 BuildGameWindows,
  531.                 BuildGameLinux,
  532.                 BuildGameOSX,
  533.                 BuildGameAndroid,
  534.             };
  535.             BuildTarget tCurrent = EditorUserBuildSettings.activeBuildTarget;
  536.             BuildTargetGroup tCurrentGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
  537.             if (StartWithCurrent)
  538.             {
  539.                 if (tCurrent == BuildTarget.Android && BuildAndroid)
  540.                 {
  541.                     tBuildOrder.Remove(BuildGameAndroid);
  542.                     tBuildOrder.Insert(0, BuildGameAndroid);
  543.                 }
  544.                 else if (TargetIsLinux(tCurrent) && (BuildLinux32 || BuildLinux64 || BuildLinuxUniversal))
  545.                 {
  546.                     tBuildOrder.Remove(BuildGameLinux);
  547.                     tBuildOrder.Insert(0, BuildGameLinux);
  548.                 }
  549.                 else if (TargetIsOSX(tCurrent) && (BuildOSX32 || BuildOSX64 || BuildOSXUniversal))
  550.                 {
  551.                     tBuildOrder.Remove(BuildGameOSX);
  552.                     tBuildOrder.Insert(0, BuildGameOSX);
  553.                 }
  554.                 else if (TargetIsWindows(tCurrent) && (BuildWin32 || BuildWin64))
  555.                 {
  556.                     tBuildOrder.Remove(BuildGameWindows);
  557.                     tBuildOrder.Insert(0, BuildGameWindows);
  558.                 }
  559.             }
  560.             if (EndWithCurrent)
  561.             {
  562.                 if (tCurrent == BuildTarget.Android && BuildAndroid)
  563.                 {
  564.                     tBuildOrder.Remove(BuildGameAndroid);
  565.                     tBuildOrder.Add(BuildGameAndroid);
  566.                 }
  567.                 else if (TargetIsLinux(tCurrent) && (BuildLinux32 || BuildLinux64 || BuildLinuxUniversal))
  568.                 {
  569.                     tBuildOrder.Remove(BuildGameLinux);
  570.                     tBuildOrder.Add(BuildGameLinux);
  571.                 }
  572.                 else if (TargetIsOSX(tCurrent) && (BuildOSX32 || BuildOSX64 || BuildOSXUniversal))
  573.                 {
  574.                     tBuildOrder.Remove(BuildGameOSX);
  575.                     tBuildOrder.Add(BuildGameOSX);
  576.                 }
  577.                 else if (TargetIsWindows(tCurrent) && (BuildWin32 || BuildWin64))
  578.                 {
  579.                     tBuildOrder.Remove(BuildGameWindows);
  580.                     tBuildOrder.Add(BuildGameWindows);
  581.                 }
  582.             }
  583.  
  584.             foreach (System.Action<bool> tBuild in tBuildOrder)
  585.                 tBuild(aDevelopment);
  586.  
  587.             if (SwitchToCurrent)
  588.             {
  589. #if UNITY_2017_0_OR_NEWER
  590.                 EditorUserBuildSettings.SwitchActiveBuildTargetAsync(tCurrentGroup, tCurrent);
  591. #else
  592.                 EditorUserBuildSettings.SwitchActiveBuildTarget(tCurrentGroup, tCurrent);
  593. #endif
  594.             }
  595.         }
  596.  
  597.         public static void BuildGameWindows(bool aDevelopment = false)
  598.         {
  599.             // Add build number
  600.             if (BuildWin32 || BuildWin64)
  601.             {
  602.                 if (!aDevelopment)
  603.                     AddBuildNumber(BuildTarget.StandaloneWindows);
  604.                 EditorProjectPrefs.Save();
  605. #if UNITY_2017_0_OR_NEWER
  606.                 BuildResult tResult = BuildResult.Succeeded;
  607.                 BuildReport tReport;
  608. #else
  609.                 string tReport;
  610.                 bool tResult = true;
  611. #endif
  612.                 if (BuildWin32)
  613.                 {
  614.                     tReport = BuildGame(BuildTarget.StandaloneWindows, aDevelopment);
  615. #if UNITY_2017_0_OR_NEWER
  616.                     if (tReport.summary.result != BuildResult.Succeeded)
  617.                         tResult = BuildResult.Failed;
  618. #else
  619.                     if (!string.IsNullOrEmpty(tReport))
  620.                         tResult = false;
  621. #endif
  622.                 }
  623.                 if (BuildWin64)
  624.                 {
  625.                     tReport = BuildGame(BuildTarget.StandaloneWindows64, aDevelopment);
  626. #if UNITY_2017_0_OR_NEWER
  627.                     if (tReport.summary.result != BuildResult.Succeeded)
  628.                         tResult = BuildResult.Failed;
  629. #else
  630.                     if (!string.IsNullOrEmpty(tReport))
  631.                         tResult = false;
  632. #endif
  633.                 }
  634. #if UNITY_2017_0_OR_NEWER
  635.                 if (tResult != BuildResult.Succeeded && !aDevelopment)
  636. #else
  637.                 if (!tResult && !aDevelopment)
  638. #endif
  639.                     SubtractBuildNumber(BuildTarget.StandaloneWindows);
  640.             }
  641.         }
  642.  
  643.         public static void BuildGameOSX(bool aDevelopment = false)
  644.         {
  645.             // Add build number
  646.             if (BuildOSX32 || BuildOSX64 || BuildOSXUniversal)
  647.             {
  648. #if UNITY_2017_0_OR_NEWER
  649.                 if (!aDevelopment)
  650.                     AddBuildNumber(BuildTarget.StandaloneOSX);
  651.                 EditorProjectPrefs.Save();
  652.  
  653.                 BuildReport tReport = BuildGame(BuildTarget.StandaloneOSX, aDevelopment);
  654.  
  655.                 if (tReport.summary.result != BuildResult.Succeeded && !aDevelopment)
  656.                     SubtractBuildNumber(BuildTarget.StandaloneOSX);
  657. #else
  658.                 string tError = "";
  659.                 if (!aDevelopment)
  660.                     AddBuildNumber(BuildTarget.StandaloneOSXIntel);
  661.                 EditorProjectPrefs.Save();
  662.                 if (BuildOSX32)
  663.                     tError += BuildGame(BuildTarget.StandaloneOSXIntel, aDevelopment);
  664.                 if (BuildOSX64)
  665.                     tError += BuildGame(BuildTarget.StandaloneOSXIntel64, aDevelopment);
  666.                 if (BuildOSXUniversal)
  667.                     tError += BuildGame(BuildTarget.StandaloneOSXUniversal, aDevelopment);
  668.                 if (!string.IsNullOrEmpty(tError))
  669.                     SubtractBuildNumber(BuildTarget.StandaloneOSXIntel);
  670. #endif
  671.             }
  672.         }
  673.  
  674.         public static void BuildGameLinux(bool aDevelopment = false)
  675.         {
  676.             if (BuildLinux32 || BuildLinux64 || BuildLinuxUniversal)
  677.             {
  678.                 // Add build number
  679.                 if (!aDevelopment)
  680.                     AddBuildNumber(BuildTarget.StandaloneLinux);
  681.                 EditorProjectPrefs.Save();
  682.                 // Build Game
  683.  #if UNITY_2017_0_OR_NEWER
  684.                 BuildResult tResult = BuildResult.Succeeded;
  685.                 BuildReport tReport;
  686. #else
  687.                 string tReport;
  688.                 bool tResult = true;
  689. #endif
  690.                 if (BuildLinux32)
  691.                 {
  692.                     tReport = BuildGame(BuildTarget.StandaloneLinux, aDevelopment);
  693. #if UNITY_2017_0_OR_NEWER
  694.                     if (tReport.summary.result != BuildResult.Succeeded)
  695.                         tResult = BuildResult.Failed;
  696. #else
  697.                     if (!string.IsNullOrEmpty(tReport))
  698.                         tResult = false;
  699. #endif
  700.                 }
  701.                 if (BuildLinux64)
  702.                 {
  703.                     tReport = BuildGame(BuildTarget.StandaloneLinux64, aDevelopment);
  704. #if UNITY_2017_0_OR_NEWER
  705.                     if (tReport.summary.result != BuildResult.Succeeded)
  706.                         tResult = BuildResult.Failed;
  707. #else
  708.                     if (!string.IsNullOrEmpty(tReport))
  709.                         tResult = false;
  710. #endif
  711.                 }
  712.                 if (BuildLinuxUniversal)
  713.                 {
  714.                     tReport = BuildGame(BuildTarget.StandaloneLinuxUniversal, aDevelopment);
  715. #if UNITY_2017_0_OR_NEWER
  716.                     if (tReport.summary.result != BuildResult.Succeeded)
  717.                         tResult = BuildResult.Failed;
  718. #else
  719.                     if (!string.IsNullOrEmpty(tReport))
  720.                         tResult = false;
  721. #endif
  722.                 }
  723. #if UNITY_2017_0_OR_NEWER
  724.                 if (tResult != BuildResult.Succeeded && !aDevelopment)
  725. #else
  726.                 if (!tResult && !aDevelopment)
  727. #endif
  728.                     SubtractBuildNumber(BuildTarget.StandaloneLinux);
  729.             }
  730.         }
  731.  
  732.         public static void BuildGameAndroid(bool aDevelopment = false)
  733.         {
  734.             if (BuildAndroid)
  735.             {
  736.                 PlayerSettings.Android.keystorePass = AndroidKeyStorePass;
  737.                 PlayerSettings.Android.keyaliasPass = AndroidKeyAliasPass;
  738.                 // Add build number
  739.                 if (!aDevelopment)
  740.                     AddBuildNumber(BuildTarget.Android);
  741.                 EditorProjectPrefs.Save();
  742.                 // Build Game
  743. #if UNITY_2017_0_OR_NEWER
  744.                 BuildReport tReport =
  745. #else
  746.                 string tReport =
  747. #endif
  748.                     BuildGame(BuildTarget.Android, aDevelopment);
  749. #if UNITY_2017_0_OR_NEWER
  750.                 if (tReport.summary.result == BuildResult.Succeeded)
  751. #else
  752.                 if (string.IsNullOrEmpty(tReport))
  753. #endif
  754.                 {
  755.                     if (RunAndroid)
  756.                         AET.InstallToDevice(GetBuildPath(BuildTarget.Android, aDevelopment));
  757.                 }
  758.                 else if (!aDevelopment)
  759.                     SubtractBuildNumber(BuildTarget.Android);
  760.             }
  761.         }
  762.  
  763.         public static void BuildGameIOS(bool aDevelopment = false)
  764.         {
  765.             if (BuildIOS)
  766.             {
  767.                 if (!aDevelopment)
  768.                     AddBuildNumber(BuildTarget.iOS);
  769.                 EditorProjectPrefs.Save();
  770.                 // Build Game
  771. #if UNITY_2017_0_OR_NEWER
  772.                 BuildReport tReport =
  773. #else
  774.                 string tReport =
  775. #endif
  776.                     BuildGame(BuildTarget.iOS, aDevelopment);
  777. #if UNITY_2017_0_OR_NEWER
  778.                 if (!aDevelopment && tReport.summary.result != BuildResult.Succeeded)
  779. #else
  780.                 if (!aDevelopment && !string.IsNullOrEmpty(tReport))
  781. #endif
  782.                     SubtractBuildNumber(BuildTarget.iOS);
  783.             }
  784.         }
  785.  
  786. #if UNITY_2017_3_OR_NEWER
  787.         public static BuildReport BuildGame(BuildTarget aTarget, bool aDevelopment = false)
  788. #else
  789.         public static string BuildGame(BuildTarget aTarget, bool aDevelopment = false)
  790. #endif
  791.         {
  792.             // Build player
  793.             List<string> tScenes = new List<string>();
  794.  
  795.             for (int i = 0; i < EditorBuildSettings.scenes.Length; i++)
  796.             {
  797.                 if (EditorBuildSettings.scenes[i].enabled)
  798.                     tScenes.Add(EditorBuildSettings.scenes[i].path);
  799.             }
  800.  
  801.             BuildPlayerOptions tOptions = new BuildPlayerOptions
  802.             {
  803.                 locationPathName = GetBuildPath(aTarget, aDevelopment),
  804.                 target = aTarget,
  805.                 options = (aDevelopment ? BuildOptions.Development : BuildOptions.None),
  806.                 scenes = tScenes.ToArray(),
  807.             };
  808. #if UNITY_2017_0_OR_NEWER
  809.             BuildReport tReport =
  810. #else
  811.             string tReport =
  812. #endif
  813.                 BuildPipeline.BuildPlayer(tOptions);
  814. #if UNITY_2017_0_OR_NEWER
  815.             Debug.Log("Build " + aTarget + ": " + tReport.summary.result);
  816.             if (tReport.summary.result == BuildResult.Succeeded)
  817. #else
  818.             Debug.Log("Build " + aTarget + ": " + tReport);
  819.             if (string.IsNullOrEmpty(tReport))
  820. #endif
  821.             {
  822.                 EditorUserBuildSettings.SetBuildLocation(aTarget, tOptions.locationPathName);
  823.                 EditorUtility.RevealInFinder(tOptions.locationPathName);
  824.             }
  825.            
  826.             return tReport;
  827.         }
  828.  
  829.         static void AddBuildNumber(BuildTarget aTarget, int aValue)
  830.         {
  831.             if (aTarget == BuildTarget.Android)
  832.                 PlayerSettings.Android.bundleVersionCode += aValue;
  833.             else if (aTarget == BuildTarget.iOS)
  834.                 IOSBuildNumber += aValue;
  835.             else if (TargetIsOSX(aTarget))
  836.                 OSXBuildNumber += aValue;
  837.             else if (TargetIsWindows(aTarget))
  838.                 WindowsBuildNumber += aValue;
  839.             else if (TargetIsLinux(aTarget))
  840.                 LinuxBuildNumber += aValue;
  841.         }
  842.  
  843.         static void AddBuildNumber(BuildTarget aTarget)
  844.         {
  845.             AddBuildNumber(aTarget, 1);
  846.         }
  847.  
  848.         static void SubtractBuildNumber(BuildTarget aTarget)
  849.         {
  850.             AddBuildNumber(aTarget, -1);
  851.         }
  852.  
  853.         public static string GetBuildPath(BuildTarget aTarget, bool aDevelopment)
  854.         {
  855.             string tPath = DataPath + "/" + BuildPath;
  856.             // Directory
  857.             if (aTarget == BuildTarget.StandaloneWindows)
  858.                 tPath += BUILD_DIR_WINDOWS;
  859.             else if (aTarget == BuildTarget.StandaloneWindows64)
  860.                 tPath += BUILD_DIR_WINDOWS + BUILD_64;
  861.             else if (aTarget == BuildTarget.StandaloneLinux)
  862.                 tPath += BUILD_DIR_LINUX;
  863.             else if (aTarget == BuildTarget.StandaloneLinux64)
  864.                 tPath += BUILD_DIR_LINUX + BUILD_64;
  865.             else if (aTarget == BuildTarget.StandaloneLinuxUniversal)
  866.                 tPath += BUILD_DIR_LINUX + BUILD_UNIVERSAL;
  867. #if UNITY_2017_3_OR_NEWER
  868.             else if (aTarget == BuildTarget.StandaloneOSX)
  869.                 tPath += BUILD_DIR_OSX;
  870. #else
  871.             else if (aTarget == BuildTarget.StandaloneOSXIntel)
  872.                 tPath += BUILD_DIR_OSX;
  873.             else if (aTarget == BuildTarget.StandaloneOSXIntel64)
  874.                 tPath += BUILD_DIR_OSX + BUILD_64;
  875.             else if (aTarget == BuildTarget.StandaloneOSXUniversal)
  876.                 tPath += BUILD_DIR_OSX + BUILD_UNIVERSAL;
  877. #endif
  878.             else if (aTarget == BuildTarget.Android)
  879.                 tPath += BUILD_DIR_ANDROID;
  880.             else if (aTarget == BuildTarget.iOS)
  881.                 tPath += BUILD_DIR_IOS;
  882.            
  883.             if (aTarget == BuildTarget.iOS)
  884.             {
  885.                 if (aDevelopment)
  886.                     tPath += "_simulator";
  887.             }
  888.             else
  889.             {
  890.                 if (aDevelopment)
  891.                     tPath += "/dev";
  892.                 else
  893.                 {
  894.                     // Build version
  895.                     tPath += "/b";
  896.                     if (aTarget == BuildTarget.Android)
  897.                         tPath += PlayerSettings.Android.bundleVersionCode;
  898.                     else if (TargetIsOSX(aTarget))
  899.                         tPath += PlayerSettings.macOS.buildNumber;
  900.                     else if (TargetIsLinux(aTarget))
  901.                         tPath += LinuxBuildNumber.ToString();
  902.                     else if (TargetIsWindows(aTarget))
  903.                         tPath += WindowsBuildNumber;
  904.                 }
  905.             }
  906.  
  907.             if (!Directory.Exists(tPath))
  908.                 Directory.CreateDirectory(tPath);
  909.  
  910.             // File
  911.             tPath += "/";
  912.             if (aTarget == BuildTarget.Android)
  913.                 tPath += FileName + ".apk";
  914.             else if (TargetIsOSX(aTarget))
  915.                 tPath += FileName;
  916.             else if (TargetIsLinux(aTarget))
  917.                 tPath += FileName;
  918.             else if (TargetIsWindows(aTarget))
  919.                 tPath += FileName + ".exe";
  920.  
  921.             return tPath;
  922.         }
  923.  
  924.         static bool TargetIsWindows(BuildTarget aTarget)
  925.         {
  926.             return aTarget == BuildTarget.StandaloneWindows
  927.                     || aTarget == BuildTarget.StandaloneWindows64;
  928.         }
  929.  
  930.         static bool TargetIsLinux(BuildTarget aTarget)
  931.         {
  932.             return aTarget == BuildTarget.StandaloneLinux
  933.                     || aTarget == BuildTarget.StandaloneLinux64
  934.                     || aTarget == BuildTarget.StandaloneLinuxUniversal;
  935.         }
  936.  
  937.         static bool TargetIsOSX(BuildTarget aTarget)
  938.         {
  939. #if UNITY_2017_3_OR_NEWER
  940.             return aTarget == BuildTarget.StandaloneOSX;
  941. #else
  942.             return aTarget == BuildTarget.StandaloneOSXIntel
  943.                     || aTarget == BuildTarget.StandaloneOSXIntel64
  944.                     || aTarget == BuildTarget.StandaloneOSXUniversal;
  945. #endif
  946.         }
  947.     }
  948. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement