From 5f9f4994cef8e160b6e9cf8240ec17617a41bd5f Mon Sep 17 00:00:00 2001 From: danielchipman Date: Fri, 14 Apr 2023 19:30:20 -0700 Subject: [PATCH 1/2] Subtarget support for Unity 2021.2+ Allows passing the -standaloneBuildSubtarget parameter via customParameters in order to facilitate dedicated server builds. Since Unity introduced the subtarget option in 2021.2, this parameter only takes effect in supported Unity versions. --- .../Assets/Editor/UnityBuilderAction/Builder.cs | 13 ++++++++++++- .../UnityBuilderAction/Input/ArgumentsParser.cs | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs index 50e25fb73..61b9cb904 100644 --- a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs @@ -29,12 +29,23 @@ public static void BuildProject() } } +#if UNITY_2021_2_OR_NEWER + // Determine subtarget + StandaloneBuildSubtarget buildSubtarget; + if (!options.TryGetValue("standaloneBuildSubtarget", out var subtargetValue) || !Enum.TryParse(subtargetValue, out buildSubtarget)) { + buildSubtarget = StandaloneBuildSubtarget.NoSubtarget; + } +#endif + // Define BuildPlayer Options var buildPlayerOptions = new BuildPlayerOptions { scenes = scenes, locationPathName = options["customBuildPath"], target = (BuildTarget) Enum.Parse(typeof(BuildTarget), options["buildTarget"]), - options = buildOptions + options = buildOptions, +#if UNITY_2021_2_OR_NEWER + subtarget = (int) buildSubtarget +#endif }; // Set version for this build diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs index c53b7d378..5beeb8df7 100644 --- a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs @@ -28,6 +28,7 @@ public static Dictionary GetValidatedOptions() } if (!Enum.IsDefined(typeof(BuildTarget), buildTarget)) { + Console.WriteLine($"{buildTarget} is not a defined {nameof(BuildTarget)}"); EditorApplication.Exit(121); } From bfc6ff3d9284c59f476728d0517b00eb6c1d4f96 Mon Sep 17 00:00:00 2001 From: danielchipman Date: Sat, 15 Apr 2023 02:43:35 -0700 Subject: [PATCH 2/2] Fix build subtarget compatibility Certain versions of Unity do not have a value for `NoSubtarget`. Using `default` will be more robust against churn in this area of Unity's API. --- .../Assets/Editor/UnityBuilderAction/Builder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs index 61b9cb904..d7cba912e 100644 --- a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs @@ -33,7 +33,7 @@ public static void BuildProject() // Determine subtarget StandaloneBuildSubtarget buildSubtarget; if (!options.TryGetValue("standaloneBuildSubtarget", out var subtargetValue) || !Enum.TryParse(subtargetValue, out buildSubtarget)) { - buildSubtarget = StandaloneBuildSubtarget.NoSubtarget; + buildSubtarget = default; } #endif