private void UnoadGameLevel(GameLevel level) { string levelName = level.Name; LevelParametrs levelParam = _levelSetups.Find((param) => param.Name.Equals(levelName)); Debug.Assert(levelParam != null); Scene scene = SceneLoader.GetSceneByName(levelParam.SceneName); if (!scene.isLoaded) { Debug.LogAssertion("Level is already unloaded! Level name: " + level.Name); return; } level.OnStartUnloading(); switch (levelParam.UnloadMode) { case UnloadType.Disactivate: foreach (var go in scene.GetRootGameObjects()) { go.SetActive(false); } level.LevelObjects = null; level.OnFinishUnloading(); break; case UnloadType.UnloadAndDestroy: StartCoroutine(SceneLoader.UnloadSceneAsync( levelParam.SceneName, (() => { level.LevelObjects = null; level.OnFinishUnloading(); }))); break; default: throw new ArgumentOutOfRangeException(); } }
private void LoadGameLevel(GameLevel level) { string levelName = level.Name; LevelParametrs levelParam = _levelSetups.Find((param) => param.Name.Equals(levelName)); Debug.Assert(levelParam != null); // Проверим, не загружен ли уже данный уровень // Если в LevelParametrs стоит Disactivate mode и уровень уже загружен, значит просто активируем его Scene scene = SceneLoader.GetSceneByName(levelParam.SceneName); if (scene.isLoaded) { switch (levelParam.UnloadMode) { case UnloadType.UnloadAndDestroy: Debug.LogAssertion("Level is already loaded! Level name: " + level.Name); break; case UnloadType.Disactivate: { level.OnStartLoading(); foreach (var go in scene.GetRootGameObjects()) { go.SetActive(true); } if (levelParam.SetActiveOnLoad) { SceneLoader.SetSceneActiveByName(levelParam.SceneName); } level.OnFinishLoading(); break; } default: throw new ArgumentOutOfRangeException(); } } else { level.OnStartLoading(); if (levelParam.LoadAsync) { StartCoroutine(SceneLoader.LoadSceneAsync( levelParam.SceneName, levelParam.Additive, levelParam.SetActiveOnLoad, () => { level.LevelObjects = SceneLoader.GetSceneByName(levelParam.SceneName).GetRootGameObjects(); level.OnFinishLoading(); })); } else { StartCoroutine(SceneLoader.LoadScene( levelParam.SceneName, levelParam.Additive, (() => { level.LevelObjects = SceneLoader.GetSceneByName(levelParam.SceneName).GetRootGameObjects(); level.OnFinishLoading(); }) )); } } }