public static void BakeMultipleScenes(string[] paths) { if (paths.Length == 0) { return; } for (int i = 0; i < paths.Length; i++) { for (int j = i + 1; j < paths.Length; j++) { if (paths[i] == paths[j]) { throw new System.Exception("no duplication of scenes is allowed"); } } } if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { return; } var sceneSetup = EditorSceneManager.GetSceneManagerSetup(); // Restore old scene setup once the bake finishes Action OnBakeFinish = null; OnBakeFinish = () => { EditorSceneManager.SaveOpenScenes(); if (sceneSetup.Length > 0) { EditorSceneManager.RestoreSceneManagerSetup(sceneSetup); } Lightmapping.bakeCompleted -= OnBakeFinish; }; // Call BakeAsync when all scenes are loaded and attach cleanup delegate EditorSceneManager.SceneOpenedCallback BakeOnAllOpen = null; BakeOnAllOpen = (UnityEngine.SceneManagement.Scene scene, SceneManagement.OpenSceneMode loadSceneMode) => { if (EditorSceneManager.loadedSceneCount == paths.Length) { BakeAsync(); Lightmapping.bakeCompleted += OnBakeFinish; EditorSceneManager.sceneOpened -= BakeOnAllOpen; } }; EditorSceneManager.sceneOpened += BakeOnAllOpen; EditorSceneManager.OpenScene(paths[0]); for (int i = 1; i < paths.Length; i++) { EditorSceneManager.OpenScene(paths[i], OpenSceneMode.Additive); } }
public static void BakeMultipleScenes(string[] paths) { if (paths.Length != 0) { for (int i = 0; i < paths.Length; i++) { for (int j = i + 1; j < paths.Length; j++) { if (paths[i] == paths[j]) { throw new Exception("no duplication of scenes is allowed"); } } } if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { SceneSetup[] sceneSetup = EditorSceneManager.GetSceneManagerSetup(); Lightmapping.OnCompletedFunction OnBakeFinish = null; OnBakeFinish = delegate { EditorSceneManager.SaveOpenScenes(); EditorSceneManager.RestoreSceneManagerSetup(sceneSetup); Lightmapping.completed = (Lightmapping.OnCompletedFunction)Delegate.Remove(Lightmapping.completed, OnBakeFinish); }; EditorSceneManager.SceneOpenedCallback BakeOnAllOpen = null; BakeOnAllOpen = delegate(Scene scene, OpenSceneMode loadSceneMode) { if (EditorSceneManager.loadedSceneCount == paths.Length) { Lightmapping.BakeAsync(); Lightmapping.completed = (Lightmapping.OnCompletedFunction)Delegate.Combine(Lightmapping.completed, OnBakeFinish); EditorSceneManager.sceneOpened -= BakeOnAllOpen; } }; EditorSceneManager.sceneOpened += BakeOnAllOpen; EditorSceneManager.OpenScene(paths[0]); for (int k = 1; k < paths.Length; k++) { EditorSceneManager.OpenScene(paths[k], OpenSceneMode.Additive); } } } }