using System; using System.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; namespace DDD { public enum SceneName { Title = 0, Restaurant = 1 } public class GameManager : MonoBehaviour { private UiManager _uiManager; private void Awake() { _uiManager = FindAnyObjectByType(); } public async void ChangeScene(SceneName sceneName) { string previousSceneName = SceneManager.GetActiveScene().name; string changeSceneName; switch (sceneName) { case SceneName.Title: changeSceneName = "00.Title"; break; case SceneName.Restaurant: changeSceneName = "01.Restaurant"; break; default: throw new ArgumentOutOfRangeException(nameof(sceneName), sceneName, null); } await _uiManager.FadeIn(); AsyncOperation loadSceneAsync = SceneManager.LoadSceneAsync(changeSceneName, LoadSceneMode.Additive); while (loadSceneAsync is { isDone: false }) await Task.Yield(); _uiManager.ChangeScene(previousSceneName, changeSceneName); await Task.Delay(1000); await _uiManager.FadeOut(); Debug.Log($"씬 로드 및 전환 완료: {changeSceneName}"); } public void ChangeSceneByIndex(int index) { var sceneEnum = (SceneName)index; ChangeScene(sceneEnum); } } }