using System.Diagnostics; using UnityEngine; using UnityEditor; using Debug = UnityEngine.Debug; public static class BuildingUtils { [MenuItem("Tools/Build/Steam/Release")] public static void SteamRelease() { IncreaseBuildNumber(); BuildRelease(); UploadSteam(); } [MenuItem("Tools/Build/Steam/Development")] public static void SteamDevelopment() { IncreaseBuildNumber(); BuildDevelopment(); UploadSteam(); } [MenuItem("Tools/Build/All Release")] public static void BuildRelease() { BuildWindowsRelease(); } [MenuItem("Tools/Build/All Development")] public static void BuildDevelopment() { BuildWindowsDevelopment(); } [MenuItem("Tools/Build/Platform/Windows/x64-Development")] public static void BuildWindowsDevelopment() => BuildWindows(false); [MenuItem("Tools/Build/Platform/Windows/x64-Release")] public static void BuildWindowsRelease() => BuildWindows(true); private static void BuildWindows(bool release) { var buildPlayerOptions = new BuildPlayerOptions { scenes = new string[EditorBuildSettings.scenes.Length] }; for (int i = 0; i < EditorBuildSettings.scenes.Length; i++) { buildPlayerOptions.scenes[i] = EditorBuildSettings.scenes[i].path; } buildPlayerOptions.target = BuildTarget.StandaloneWindows64; buildPlayerOptions.options = release ? BuildOptions.None : BuildOptions.Development; buildPlayerOptions.locationPathName = Application.dataPath + $"/../../{Application.productName}-Steam/ContentBuilder/content/windows/{Application.productName}.exe"; BuildPipeline.BuildPlayer(buildPlayerOptions); } private static void IncreaseBuildNumber() { string[] versionParts = PlayerSettings.bundleVersion.Split('.'); if (versionParts.Length != 3 || !int.TryParse(versionParts[2], out int version)) { Debug.LogError("IncreaseBuildNumber failed to update version " + PlayerSettings.bundleVersion); return; } versionParts[2] = (version + 1).ToString(); PlayerSettings.bundleVersion = string.Join(".", versionParts); } private static void UploadSteam() { string command = $"cd {Application.dataPath}/../../{Application.productName}-Steam/ContentBuilder && run_build.bat"; var processInfo = new ProcessStartInfo("cmd.exe", $"/c {command}") { CreateNoWindow = false, UseShellExecute = false }; var process = Process.Start(processInfo); process.WaitForExit(); Debug.Log(process.ExitCode); process.Close(); } }