ProjectDDD/Assets/_Datas/02.Scripts/Controllers/GameManager.cs
2025-07-03 13:10:13 +09:00

64 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Serialization;
namespace DDD
{
public enum SceneType
{
Title = 0,
Restaurant = 1
}
public class GameManager : Singleton<GameManager>
{
private static readonly Dictionary<SceneType, string> SceneTypeDict = new()
{
{ SceneType.Title, "00.Title" },
{ SceneType.Restaurant, "01.Restaurant" }
};
public SceneType CurrentSceneType { get; private set; }
private void Start()
{
CurrentSceneType = SceneType.Title;
}
public async Task ChangeScene(SceneType sceneType)
{
if (!SceneTypeDict.TryGetValue(sceneType, out string changeSceneName))
{
Debug.LogError($"[GameManager] 정의되지 않은 SceneType: {sceneType}");
return;
}
await UiManager.Instance.FadeIn();
AsyncOperation loadSceneAsync = SceneManager.LoadSceneAsync(changeSceneName, LoadSceneMode.Additive);
while (loadSceneAsync is { isDone: false })
await Task.Yield();
// 씬 로딩 후 초기화 작업
UiManager.Instance.ChangeScene(CurrentSceneType, sceneType);
CameraManager.Instance.ChangeScene(sceneType);
KeyManager.Instance.ChangeScene(sceneType);
CurrentSceneType = sceneType;
await Task.Delay(1000);
await UiManager.Instance.FadeOut();
Debug.Log($"{changeSceneName} 씬으로 전환 완료");
}
public void ChangeSceneByIndex(int index)
{
var sceneEnum = (SceneType)index;
_ = ChangeScene(sceneEnum);
}
}
}