Пример #1
0
        protected void OnActiveSceneChanged(Scene oldScene, Scene newScene)
        {
            isLoading       = false;
            loadingProgress = 0f;

            SubScene newSceneSubScene = UnityVersionHandler.GetSceneInstance <SubScene> (newScene);

            if (newSceneSubScene)
            {
                // New active scene is a sub-scene
                newSceneSubScene.MakeMain();
            }

            if (!string.IsNullOrEmpty(oldScene.name))
            {
                SceneInfo oldSceneInfo = GetSceneInfo(oldScene.buildIndex);
                if (oldSceneInfo != null)
                {
                    MultiSceneChecker multiSceneChecker = MultiSceneChecker.GetSceneInstance(oldScene);
                    if (multiSceneChecker != null)
                    {
                        // Register as a subscene
                        GameObject subSceneOb = new GameObject();
                        UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(subSceneOb, oldScene);
                        SubScene oldSubScene = subSceneOb.AddComponent <SubScene> ();
                        oldSubScene.Initialise(multiSceneChecker);
                    }
                }
            }
        }
Пример #2
0
        protected void OnActiveSceneChanged(Scene oldScene, Scene newScene)
        {
            isLoading       = false;
            loadingProgress = 0f;

            SubScene newSceneSubScene = UnityVersionHandler.GetSceneInstance <SubScene> (newScene);

            if (newSceneSubScene != null)
            {
                // New active scene is a sub-scene
                newSceneSubScene.MakeMain();
            }
        }
Пример #3
0
        /**
         * <summary>Removes a scene, without affecting any other open scenes, provided multiple scenes are open. If the active scene is removed, the last-added sub-scene will become the new active scene.</summary>
         * <param name = "sceneInfo">The SceneInfo of the new scene to remove</param>
         */
        public bool RemoveScene(SceneInfo sceneInfo)
        {
            // Kill actionlists
            KickStarter.actionListManager.KillAllFromScene(sceneInfo);

            if (thisSceneInfo.Matches(sceneInfo))
            {
                // Want to close active scene

                if (subScenes == null || subScenes.Count == 0)
                {
                    ACDebug.LogWarning("Cannot remove scene " + sceneInfo.number + ", as it is the only one open!");
                    return(false);
                }

                // Save active scene
                KickStarter.levelStorage.StoreCurrentLevelData();

                // Make the last-opened subscene the new active one
                SubScene lastSubScene = subScenes [subScenes.Count - 1];
                KickStarter.mainCamera.gameObject.SetActive(false);
                lastSubScene.MakeMain();
                subScenes.Remove(lastSubScene);

                StartCoroutine(CloseScene(thisSceneInfo));
                thisSceneInfo = lastSubScene.SceneInfo;
                return(true);
            }

            // Want to remove a sub-scene
            for (int i = 0; i < subScenes.Count; i++)
            {
                if (subScenes[i].SceneInfo.Matches(sceneInfo))
                {
                    // Save sub scene
                    KickStarter.levelStorage.StoreSubSceneData(subScenes[i]);

                    StartCoroutine(CloseScene(subScenes[i].SceneInfo));
                    subScenes.RemoveAt(i);
                    return(true);
                }
            }

            return(false);
        }