diff --git a/CHANGELOG.md b/CHANGELOG.md index 7419062c..55b6bec6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Fixed +- [#435] Fixed an issue where `File -> Save As` could break due to the internal preview scene becoming selected ### Changed diff --git a/Editor/PreviewSystem/Rendering/NDMFPreviewSceneManager.cs b/Editor/PreviewSystem/Rendering/NDMFPreviewSceneManager.cs index 8e47de3a..a2be5690 100644 --- a/Editor/PreviewSystem/Rendering/NDMFPreviewSceneManager.cs +++ b/Editor/PreviewSystem/Rendering/NDMFPreviewSceneManager.cs @@ -52,6 +52,31 @@ private static void Init() // We never want to save anything in the preview scene, and we definitely don't want to end up with // UI popups prompting to save it, so aggressively clear its dirty flag. clearSceneDirtiness?.Invoke(null, new object[] { _previewScene }); + + if (_previewScene.IsValid() && SceneManager.GetActiveScene() == _previewScene) + { + // Oops, make sure the preview scene isn't selected + var found = false; + + var sceneCount = SceneManager.sceneCount; + for (var i = 0; i < sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + if (scene == _previewScene) continue; + + SceneManager.SetActiveScene(scene); + found = true; + break; + } + + if (!found) + { + // Unload the preview scene if it's the only one left + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects); + + ResetPreviewScene(); + } + } }; // Reset preview scene on play mode transition