Minimal implementation of the EditorSceneManager for older Unity, up to v5.2.
    public void OnGUI()
    {
        Refresh();

        Scene activeScene = EditorSceneManager.GetActiveScene();

        foreach (string path in _scenePaths)
        {
            Scene scene = SceneManager.GetSceneByPath(path);

            bool isActiveScene = activeScene == scene;

            EditorGUI.BeginDisabledGroup(isActiveScene);

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(CoreEditorUtils.GetSceneNameFromPath(path));

            if (GUILayout.Button("Import"))
            {
                ImportScene(path);
            }

            if (GUILayout.Button("Open"))
            {
                OpenScene(path);
            }

            EditorGUI.EndDisabledGroup();
            EditorGUILayout.EndHorizontal();
        }
    }
    public void Export()
    {
        GameObject screenToMove = GameObject.Instantiate(_loadedScreenCache._duplicateScreen);

        screenToMove.name = _loadedScreenCache._duplicateScreen.name;
        screenToMove.SetActive(false);

        if (_scene.isLoaded)
        {
            foreach (GameObject rootObject in _scene.GetRootGameObjects())
            {
                _screenController = rootObject.GetComponent <ScreenView>();

                if (_screenController != null)
                {
                    GameObject.DestroyImmediate(_screenController.gameObject);
                    break;
                }
            }
        }


        EditorSceneManager.MoveGameObjectToScene(screenToMove, _scene);
        EditorSceneManager.SaveScene(_scene);
    }
    private void ImportScene(string path)
    {
        EditorSceneManager.OpenScene(path, UnityEditor.SceneManagement.OpenSceneMode.Additive);
        Scene scene       = SceneManager.GetSceneByPath(path);
        Scene activeScene = EditorSceneManager.GetActiveScene();

        EditorSceneManager.MergeScenes(scene, activeScene);
    }
 static void ExitFromEdit()
 {
     if (!ESM.SaveCurrentModifiedScenesIfUserWantsTo())
     {
         CancelPlayMode = true; return;
     }
     SceneSetups = ESM.GetSceneManagerSetup();
     ESM.OpenScene(SceneUtility.GetScenePathByBuildIndex(0), OpenSceneMode.Single);
 }
        public UniTask AddingAsync(Scenes scene, Action <DiContainer> extraBindings = null)
        {
            var sceneAsset = GetScenes(scene.ToString());

            if (sceneAsset == null)
            {
                Debug.LogWarning("Scene Load Warrning : Loaded Scene");
                return(UniTask.CompletedTask);
            }
            SceneManager.OpenScene(AssetDatabase.GetAssetPath(sceneAsset), OpenSceneMode.Additive);
            return(UniTask.CompletedTask);
        }
        public UniTask RemoveAsync(Scenes scene)
        {
            var isSharedMainExists = false;
            var scenePath          = "";

            for (var index = 0; index < SceneManager.sceneCount; index++)
            {
                var sceneAt = SceneManager.GetSceneAt(index);
                isSharedMainExists = sceneAt.isLoaded && sceneAt.name == scene.ToString();
                scenePath          = sceneAt.path;
            }
            if (!isSharedMainExists)
            {
                return(UniTask.CompletedTask);
            }
            SceneManager.UnloadSceneAsync(scenePath);
            return(UniTask.CompletedTask);
        }
    private void ImportScene(string path)
    {
        WindowView windowController = GameObject.FindObjectOfType <WindowView>();

        if (windowController == null)
        {
            Debug.LogError("WindowController not found in scene.");
            return;
        }

        Scene      scene            = EditorSceneManager.OpenScene(path, UnityEditor.SceneManagement.OpenSceneMode.Additive);
        Scene      activeScene      = EditorSceneManager.GetActiveScene();
        ScreenView screenController = null;

        //EditorSceneManager.MergeScenes(scene, activeScene);

        GameObject[] rootObjects = scene.GetRootGameObjects();

        foreach (GameObject rootObject in rootObjects)
        {
            screenController = rootObject.GetComponent <ScreenView>();

            if (screenController != null)
            {
                break;
            }
        }

        if (screenController == null)
        {
            Debug.LogError("ScreenController not found in loaded scene. ");
            SceneManager.UnloadSceneAsync(scene);
            return;
        }
        else
        {
            if (_loadedScreenCache == null)
            {
                GameObject cache = new GameObject("Cache");
                _loadedScreenCache = cache.AddComponent <LoadedScreenCache>();
            }

            _loadedScreen = new LoadedScreen(scene, screenController, _loadedScreenCache);
            GameObject duplicateScreen = _loadedScreen.GetDuplicateScreen();
            duplicateScreen.transform.SetParent(windowController.transform, false);

            RectTransform rectTransform = duplicateScreen.GetComponent <RectTransform>();

            if (rectTransform)
            {
                rectTransform.anchorMin = Vector2.zero;
                rectTransform.anchorMax = Vector2.one;
                rectTransform.offsetMax = Vector2.zero;
                rectTransform.offsetMin = Vector2.zero;

                rectTransform.hasChanged = false;
            }

            _loadedScreenCache.scenePath        = scene.path;
            _loadedScreenCache._duplicateScreen = duplicateScreen;

            screenController.gameObject.SetActive(false);
        }
    }
 private void OpenScene(string path)
 {
     EditorSceneManager.OpenScene(path);
 }
 static void EnterToEdit()
 {
     ESM.RestoreSceneManagerSetup(SceneSetups);
     SceneSetups = null;
 }
Example #10
0
 public static void MoveSceneAfter(Scene src, Scene dst)
 {
     EditorSceneManager.INTERNAL_CALL_MoveSceneAfter(ref src, ref dst);
 }
Example #11
0
 public static bool CloseScene(Scene scene, bool removeScene)
 {
     return(EditorSceneManager.INTERNAL_CALL_CloseScene(ref scene, removeScene));
 }
Example #12
0
 public static bool MarkSceneDirty(Scene scene)
 {
     return(EditorSceneManager.INTERNAL_CALL_MarkSceneDirty(ref scene));
 }
Example #13
0
        public static bool SaveScene(Scene scene, string dstScenePath)
        {
            bool saveAsCopy = false;

            return(EditorSceneManager.INTERNAL_CALL_SaveScene(ref scene, dstScenePath, saveAsCopy));
        }
Example #14
0
 public static bool SaveScene(Scene scene, [DefaultValue("\"\"")] string dstScenePath, [DefaultValue("false")] bool saveAsCopy)
 {
     return(EditorSceneManager.INTERNAL_CALL_SaveScene(ref scene, dstScenePath, saveAsCopy));
 }
Example #15
0
 internal static bool SaveSceneAs(Scene scene)
 {
     return(EditorSceneManager.INTERNAL_CALL_SaveSceneAs(ref scene));
 }