示例#1
0
        private static void SceneChange()
        {
            var scene = EditorSceneManager.GetSceneAt(0);

            try
            {
                switch (State)
                {
                case SceneChangeState.WaitOpenScene:
                {
                    if (!string.IsNullOrEmpty(Prefs.targetScene))
                    {
                        EditorApplication.LockReloadAssemblies();

                        Prefs.resumeScene = scene.path;

                        EditorSceneManager.OpenScene(Prefs.targetScene);

                        State = SceneChangeState.WaitSceneChange;
                    }
                    else
                    {
                        State = SceneChangeState.None;

                        EditorApplication.update -= SceneChange;
                    }
                }
                break;

                case SceneChangeState.WaitSceneChange:
                {
                    if (scene.path == Prefs.targetScene)
                    {
                        State = SceneChangeState.None;

                        Prefs.targetScene = null;

                        onEditorSceneChange.OnNext(Unit.Default);
                        onEditorSceneChange.OnCompleted();
                        onEditorSceneChange = null;

                        EditorApplication.update -= SceneChange;

                        EditorApplication.UnlockReloadAssemblies();
                    }
                }
                break;
                }
            }
            catch
            {
                State = SceneChangeState.None;

                EditorApplication.update -= SceneChange;

                EditorApplication.UnlockReloadAssemblies();
            }
        }
示例#2
0
        //----- method -----

        public static IObservable <bool> SceneChange(string targetScenePath)
        {
            if (State != SceneChangeState.None)
            {
                return(Observable.Return(false));
            }

            if (string.IsNullOrEmpty(targetScenePath))
            {
                return(Observable.Return(false));
            }

            if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
            {
                return(Observable.Return(false));
            }

            var scene = EditorSceneManager.GetSceneAt(0);

            if (scene.path == targetScenePath)
            {
                State = SceneChangeState.None;
            }
            else
            {
                State = SceneChangeState.WaitOpenScene;

                Prefs.targetScene         = targetScenePath;
                EditorApplication.update += SceneChange;

                onEditorSceneChange = new Subject <Unit>();

                return(onEditorSceneChange.Select(x => true));
            }

            return(Observable.Return(true));
        }