private void Refresh() { EditorApplication.playModeStateChanged -= EditorApplication_playModeStateChanged; EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged; Undo.undoRedoPerformed -= OnUndoRedo; Undo.undoRedoPerformed += OnUndoRedo; EditorSceneManager.sceneOpened -= EditorSceneManager_sceneOpened; EditorSceneManager.sceneOpened += EditorSceneManager_sceneOpened; if (sceneManager == null) { return; } if (sceneManager.Transitioner != null) { sceneManager.Transitioner.OnTransitionCompleted.RemoveListener(OnTransitioned); sceneManager.Transitioner.OnTransitionCompleted.AddListener(OnTransitioned); sceneManager.Transitioner.OnTransitionStarted.RemoveListener(OnTransitionStarted); sceneManager.Transitioner.OnTransitionStarted.AddListener(OnTransitionStarted); } sceneManager.SceneVariables.OnVariableChanged -= SceneVariables_OnVariableChanged; sceneManager.SceneVariables.OnVariableChanged += SceneVariables_OnVariableChanged; SerializedSceneManager = new SerializedSceneManager(sceneManager); serializedSceneManager.SetActiveScene(); isInitialized = false; if (!EditorApplication.isPlaying) { sceneManager.SceneVariables.ResetVariables(); } needsRefresh = false; OnRefresh.SafeInvoke(this, System.EventArgs.Empty); Repaint(); }