using System.Collections; using Cysharp.Threading.Tasks; using Framework; using PhxhSDK; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.SceneManagement; namespace Gameplay.SubSystems { public class GameSceneManager : Singlenton { public enum EnumScene { GameStart, // 登录场景 GameMain, // 主场景 GameLevel // 关卡(战场)场景 } public const string SCENE_PREFIX = "Assets/Scenes/"; public const string START_SCENE_NAME = "StartScene"; public const string LEVEL_SCENE_NAME = "LevelScene"; public const string MAIN_SCENE_NAME = "MainScene"; public const string SCENE_SUFFIX = ".unity"; public async UniTask ChangeScene(EnumScene enumScene) { string sceneName = SCENE_PREFIX; switch (enumScene) { case EnumScene.GameStart: sceneName += START_SCENE_NAME; break; case EnumScene.GameMain: sceneName += MAIN_SCENE_NAME; break; case EnumScene.GameLevel: sceneName += LEVEL_SCENE_NAME; break; default: DebugUtil.LogError("{0}.ChangeScene, {1} has no scene name matched",GetType(),enumScene); sceneName += START_SCENE_NAME; break; } sceneName += SCENE_SUFFIX; await Addressables.LoadSceneAsync(sceneName, LoadSceneMode.Single).ToUniTask(); } public async UniTask LoadSceneAsync(string scenePath, LoadSceneMode mode = LoadSceneMode.Single) { await Addressables.LoadSceneAsync(scenePath, mode).ToUniTask(); } } }