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); } } } }
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(); } }
/** * <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); }