private IEnumerator AnimateUnloadAdditiveScene(SceneAnimationEventsManager animEventsManager, Action onUnloaded = null) { if (additiveScenes.Count > 0) { if (animEventsManager == null) { animEventsManager = FindObjectsOfType <SceneAnimationEventsManager>() .FirstOrDefault(m => m.gameObject.scene == UnitySceneManager.GetSceneByBuildIndex((int)additiveScenes.Peek())); } // Found if (animEventsManager != null) { animEventsManager.FadeOut(); yield return(new WaitUntil(() => animEventsManager.FadedOut)); } var scene = additiveScenes.Pop(); UnloadScene((int)scene); onUnloaded?.Invoke(); } this.RemoveCoroutine(nameof(AnimateUnloadAdditiveScene)); }
public void ResumeGame(SceneAnimationEventsManager animEventsManager = null) { UnloadLastAdditiveScene(animEventsManager, () => { isPaused = false; Time.timeScale = 1f; }); }
private IEnumerator AnimateChangeSceneTo(Scene scene, SceneAnimationEventsManager animEventsManager) { if (CurrentScene != scene) { if (animEventsManager == null) { animEventsManager = FindObjectOfType <SceneAnimationEventsManager>(); } CurrentScene = scene; // Found if (animEventsManager != null) { animEventsManager.FadeOut(); yield return(new WaitUntil(() => animEventsManager.FadedOut)); } LoadSceneImmediately(); this.RemoveCoroutine(nameof(AnimateChangeSceneTo)); } }
public void ChangeSceneTo(Scene scene, SceneAnimationEventsManager animEventsManager = null) => this.RestartCoroutine(AnimateChangeSceneTo(scene, animEventsManager), nameof(AnimateChangeSceneTo));
public void UnloadLastAdditiveScene(SceneAnimationEventsManager animEventsManager = null, Action onUnloaded = null) => this.RestartCoroutine(AnimateUnloadAdditiveScene(animEventsManager, onUnloaded), nameof(AnimateUnloadAdditiveScene));