I recently started to work with Unity 2021.2 and I found out BuildTargetGroup was being replaced by NamedBuildTarget. Previously, the currently targeted BuildTargetGroup could be retrieved from EditorUserBuildSettings.activeBuildTarget. In Unity 2021.2, I can’t figure out what is supposed to replace this function.
How do you retrieve the currently targeted NamedBuildTarget ?
Looks like Unity forgot to add a method of doing this (up to 2021.3 at least), which is a bit of an oversight on their part.
I put together the following code to get all NamedBuildTargets (excluding ‘Unknown’) as in my case having all targets will suffice (I’m setting scripting define symbols which aren’t platform specific).
public static List<NamedBuildTarget> GetAllNamedBuildTargets()
{
var staticFields = typeof(NamedBuildTarget).GetFields(BindingFlags.Public | BindingFlags.Static);
var buildTargets = new List<NamedBuildTarget>();
foreach (var staticField in staticFields)
{
// We exclude 'Unknown' because this can throw errors when used with certain methods.
if (staticField.Name == "Unknown")
continue;
if (staticField.FieldType == typeof(NamedBuildTarget))
buildTargets.Add((NamedBuildTarget)staticField.GetValue(null));
}
return buildTargets;
}
BuildTarget buildTarget = EditorUserBuildSettings.activeBuildTarget;
BuildTargetGroup targetGroup = BuildPipeline.GetBuildTargetGroup(buildTarget);
var namedBuildTarget = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(targetGroup);