public static class BuildScript { // Helper: use EditorBuildSettings scenes if present, otherwise fall back to your test scene static string[] ScenesToBuild() => EditorBuildSettings.scenes.Length > 0 ? EditorBuildSettings.scenes.Where(s => s.enabled).Select(s => s.path).ToArray() : new[] { "Assets/Scenes/TestScene.unity" }; [MenuItem("Build/Build Windows")] public static void BuildWindows() { var buildPath = "Builds/Windows"; Directory.CreateDirectory(buildPath); BuildPipeline.BuildPlayer( ScenesToBuild(), Path.Combine(buildPath, "TestGame.exe"), BuildTarget.StandaloneWindows64, BuildOptions.None ); } [MenuItem("Build/Build Mac")] public static void BuildMac() { var buildPath = "Builds/Mac"; Directory.CreateDirectory(buildPath); BuildPipeline.BuildPlayer( ScenesToBuild(), Path.Combine(buildPath, "TestGame.app"), BuildTarget.StandaloneOSX, BuildOptions.None ); } // ? New: CI-friendly Android build public static void BuildAndroidCI() { // Make sure we’re on the Android target (does nothing if already there) EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android); // Optional: ensure .apk (set to .aab if you want App Bundle) var buildDir = "Builds/Android"; Directory.CreateDirectory(buildDir); var outputPath = Path.Combine(buildDir, "TestGame.apk"); // Optional CI toggles (strip development/build-report etc. if you prefer) var options = BuildOptions.None; var report = BuildPipeline.BuildPlayer( ScenesToBuild(), outputPath, BuildTarget.Android, options ); if (report.summary.result != UnityEditor.Build.Reporting.BuildResult.Succeeded) throw new System.Exception("Android build failed: " + report.summary.result); } }