diff --git a/Source/Editor/States/ChangingScenesState.cs b/Source/Editor/States/ChangingScenesState.cs index a146b7fa9..72259e832 100644 --- a/Source/Editor/States/ChangingScenesState.cs +++ b/Source/Editor/States/ChangingScenesState.cs @@ -19,6 +19,7 @@ namespace FlaxEditor.States private readonly List _scenesToLoad = new List(); private readonly List _scenesToUnload = new List(); private Guid _lastSceneFromRequest; + private bool _sameSceneReload = false; internal ChangingScenesState(Editor editor) : base(editor) @@ -164,10 +165,22 @@ namespace FlaxEditor.States { Assert.AreEqual(Guid.Empty, _lastSceneFromRequest, "Invalid state."); - // Bind events - Level.SceneLoaded += OnSceneEvent; - Level.SceneLoadError += OnSceneEvent; - Level.SceneUnloaded += OnSceneEvent; + // Bind events, only bind loading event and error if re-loading the same scene to avoid issues. + if (_scenesToUnload.Count == 1 && _scenesToLoad.Count == 1) + { + if (_scenesToLoad[0] == _scenesToUnload[0].ID) + { + Level.SceneLoaded += OnSceneEvent; + Level.SceneLoadError += OnSceneEvent; + _sameSceneReload = true; + } + } + if (!_sameSceneReload) + { + Level.SceneLoaded += OnSceneEvent; + Level.SceneLoadError += OnSceneEvent; + Level.SceneUnloaded += OnSceneEvent; + } // Push scenes changing requests for (int i = 0; i < _scenesToUnload.Count; i++) @@ -210,9 +223,18 @@ namespace FlaxEditor.States } // Unbind events - Level.SceneLoaded -= OnSceneEvent; - Level.SceneLoadError -= OnSceneEvent; - Level.SceneUnloaded -= OnSceneEvent; + if (_sameSceneReload) + { + Level.SceneLoaded -= OnSceneEvent; + Level.SceneLoadError -= OnSceneEvent; + _sameSceneReload = false; + } + else + { + Level.SceneLoaded -= OnSceneEvent; + Level.SceneLoadError -= OnSceneEvent; + Level.SceneUnloaded -= OnSceneEvent; + } } private void OnSceneEvent(Scene scene, Guid sceneId)