using System; using System.Collections.Generic; using System.Text; using UnityEngine; namespace UnityEditor.TestTools.TestRunner { internal class PlayerLauncherBuildOptions { public BuildPlayerOptions BuildPlayerOptions; #if UNITY_6000_1_OR_NEWER public BuildPlayerWithProfileOptions BuildPlayerWithProfileOptions; #endif public string PlayerDirectory; private EditorBuildSettingsScene[] originalScenes = Array.Empty(); public override string ToString() { var str = new StringBuilder(); #if UNITY_6000_1_OR_NEWER if (BuildPlayerWithProfileOptions.buildProfile != null) { var buildProfile = BuildPlayerWithProfileOptions.buildProfile; str.AppendLine(string.Concat("BuildTarget: ", buildProfile.buildTarget.ToString())); str.AppendLine(string.Concat("BuildPlayerLocation: ", BuildPlayerWithProfileOptions.locationPathName)); str.AppendLine(string.Concat("Options: ", BuildPlayerWithProfileOptions.options.ToString())); str.AppendLine("assetBundleManifestPath = " + BuildPlayerWithProfileOptions.assetBundleManifestPath); str.Append((buildProfile.overrideGlobalScenes) ? "Profile Scenes: " : "Global Scenes: "); var scenes = (buildProfile.overrideGlobalScenes) ? buildProfile.scenes : EditorBuildSettings.GetEditorBuildSettingsSceneIgnoreProfile(); for (int i = 0; i < scenes.Length; i++) { str.Append(JsonUtility.ToJson(scenes[i])); str.Append(", "); } str.AppendLine(); return str.ToString(); } #endif str.AppendLine("locationPathName = " + BuildPlayerOptions.locationPathName); str.AppendLine("target = " + BuildPlayerOptions.target); str.AppendLine("scenes = " + string.Join(", ", BuildPlayerOptions.scenes)); str.AppendLine("assetBundleManifestPath = " + BuildPlayerOptions.assetBundleManifestPath); str.AppendLine("options.Development = " + ((BuildPlayerOptions.options & BuildOptions.Development) != 0)); str.AppendLine("options.AutoRunPlayer = " + ((BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0)); str.AppendLine("options.ForceEnableAssertions = " + ((BuildPlayerOptions.options & BuildOptions.ForceEnableAssertions) != 0)); return str.ToString(); } public BuildOptions GetCurrentBuildOptions() { #if UNITY_6000_1_OR_NEWER if (BuildPlayerWithProfileOptions.buildProfile != null) return BuildPlayerWithProfileOptions.options; #endif return BuildPlayerOptions.options; } public string GetCurrentLocationPath() { #if UNITY_6000_1_OR_NEWER if (BuildPlayerWithProfileOptions.buildProfile != null) return BuildPlayerWithProfileOptions.locationPathName; #endif return BuildPlayerOptions.locationPathName; } #if UNITY_6000_1_OR_NEWER /// /// Prepares to build with a build profile. Caching the profiles scene list /// before injecting the test scene path. /// public void OnBeforeBuildProfileBuild(string testScenePath) { var profile = BuildPlayerWithProfileOptions.buildProfile; // Initial test scene must be first entry in scene list. var scenes = new List { new EditorBuildSettingsScene(testScenePath, true) }; if (profile.overrideGlobalScenes) { originalScenes = profile.scenes; scenes.AddRange(profile.scenes); profile.scenes = scenes.ToArray(); } else { originalScenes = EditorBuildSettings.scenes; scenes.AddRange(profile.scenes); EditorBuildSettings.scenes = scenes.ToArray(); } } /// /// After build, cleanup scene list changes. /// public void OnAfterBuildProfileBuild() { var profile = BuildPlayerWithProfileOptions.buildProfile; if (profile.overrideGlobalScenes) { profile.scenes = originalScenes; } else { EditorBuildSettings.scenes = originalScenes; } } public bool ShouldBuildWithProfile() { return BuildPlayerWithProfileOptions.buildProfile != null; } #endif } }