NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/SubSystems/GameSceneManager.cs

56 lines
1.8 KiB
C#
Raw Normal View History

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