using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; namespace Script.battle { //各种模式场景 public enum GBattleMode { Not = -1, Default = 0 } //初始化参数类 public class GBattleModeInfo { public List modes; public GameObject root; } //全局战斗模式管理器 public class GBattleModeManager : SingletonScene { public static string[] Worlds = { "WorldScene" }; //当前模式 private GBattleMode _current = GBattleMode.Not; //初始化管理器 public void Init(GBattleModeInfo info) { } //打开指定模式 public async UniTask Open(GBattleMode mode) { //销毁之前模式 await Close(); _current = mode; await LoadScene(mode); } //关闭当前模式 public async UniTask Close() { await UnloadScene(_current); _current = GBattleMode.Not; } //获取场景名称 public string GetWorldName(GBattleMode mode) { return Worlds[(int)mode]; } //加载场景 private async UniTask LoadScene(GBattleMode mode) { if (mode == GBattleMode.Not) return; Debug.Log($"[GBattleModeManager] 打开场景{GetWorldName(mode)}"); await SceneManager.LoadSceneAsync(GetWorldName(mode), LoadSceneMode.Additive); } //销毁场景 private async UniTask UnloadScene(GBattleMode mode) { if (mode == GBattleMode.Not) return; Debug.Log($"[GBattleModeManager] 关闭场景{GetWorldName(mode)}"); await SceneManager.UnloadSceneAsync(GetWorldName(mode)); } } }