Hello, i have a troubles with generating scene before build and sometimes in not imported project. I create a scene generator, which create a static configured copy of scene and link it to game before build. But sometimes when i look to scenes list i didn’t see new scene. Script added.
[MenuItem("TurboRocketGames/Assets/Pre-Build Config")]
public static void PreBuildConfig()
{
Debug.LogFormat("Scenes before packing, {0}", string.Join(",", EditorBuildSettings.scenes.Select((settingsScene, i) => i + " : " + settingsScene.path)));
CreateScene(UpdateSceneList);
}
private static void CreateScene(Action onComplete)
{
EditorSceneManager.SaveOpenScenes();
var scene = EditorSceneManager.OpenScene(SCENE_MAIN_PATH);
if (!AssetDatabase.IsValidFolder(PATH_GENERATED))
{
AssetDatabase.CreateFolder(FOLDER_SCENES_PATH, FOLDER_GENERATED_NAME);
}
EditorSceneManager.SaveScene(scene, SCENE_GENERATED_PATH, true);
scene = EditorSceneManager.OpenScene(SCENE_GENERATED_PATH);
var roots = scene.GetRootGameObjects();
foreach (var root in roots)
{
UpdateStatic(root);
}
EditorSceneManager.SceneSavedCallback savedDeleg = null;
savedDeleg = (delegate(Scene s)
{
EditorSceneManager.sceneSaved -= savedDeleg;
if (s == scene)
{
onComplete.Invoke();
}
});
EditorSceneManager.sceneSaved += savedDeleg;
EditorSceneManager.SaveScene(scene, SCENE_GENERATED_PATH);
EditorSceneManager.SaveOpenScenes();
}
private static void UpdateSceneList()
{
List<EditorBuildSettingsScene> editorBuildSettingsScenes = EditorBuildSettings.scenes.ToList();
var targetScene = editorBuildSettingsScenes[1];
if (targetScene.path.Equals(SCENE_GENERATED_PATH) ||
targetScene.path.Equals(SCENE_MAIN_PATH) ||
string.IsNullOrWhiteSpace(targetScene.path))
{
Debug.Log("Scenes update");
editorBuildSettingsScenes[1] = new EditorBuildSettingsScene(SCENE_GENERATED_PATH, true);
}
else
{
Debug.Log("Scenes insert");
editorBuildSettingsScenes.Insert(1, new EditorBuildSettingsScene(SCENE_GENERATED_PATH, true));
}
EditorBuildSettings.scenes = editorBuildSettingsScenes.ToArray();
Debug.LogFormat("Scenes packed in settings, {0}", string.Join(",", EditorBuildSettings.scenes.Select((settingsScene, i) => i + " : " + settingsScene.path)));
}