64 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|
|
} |