using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class RandomSceneRouteManager : MonoBehaviour { public static RandomSceneRouteManager Instance; [Header("·£´ýÀ¸·Î À̵¿ÇÒ ¹æ Scene À̸§µé")] [SerializeField] private string[] roomSceneNames; [Header("¸ðµç ¹æ ¹æ¹® ÈÄ À̵¿ÇÒ ¸¶Áö¸· Scene À̸§")] [SerializeField] private string finalSceneName; private readonly HashSet visitedScenes = new HashSet(); private bool finalSceneUsed = false; private void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } public string GetNextSceneName() { string currentSceneName = SceneManager.GetActiveScene().name; Debug.Log("ÇöÀç ¾À À̸§: " + currentSceneName); if (IsRoomScene(currentSceneName)) { visitedScenes.Add(currentSceneName); } List candidates = new List(); foreach (string sceneName in roomSceneNames) { if (string.IsNullOrWhiteSpace(sceneName)) { continue; } string cleanSceneName = sceneName.Trim(); if (cleanSceneName == currentSceneName) { continue; } if (visitedScenes.Contains(cleanSceneName)) { continue; } candidates.Add(cleanSceneName); } if (candidates.Count > 0) { int randomIndex = Random.Range(0, candidates.Count); string selectedSceneName = candidates[randomIndex]; visitedScenes.Add(selectedSceneName); Debug.Log("·£´ýÀ¸·Î ¼±ÅÃµÈ ´ÙÀ½ ¾À: " + selectedSceneName); return selectedSceneName; } if (!finalSceneUsed && !string.IsNullOrWhiteSpace(finalSceneName)) { finalSceneUsed = true; string cleanFinalSceneName = finalSceneName.Trim(); Debug.Log("¸ðµç ¹æ ¹æ¹® ¿Ï·á. ¸¶Áö¸· ¾ÀÀ¸·Î À̵¿: " + cleanFinalSceneName); return cleanFinalSceneName; } Debug.LogWarning("À̵¿ °¡´ÉÇÑ ´ÙÀ½ ¾ÀÀÌ ¾ø½À´Ï´Ù."); return string.Empty; } private bool IsRoomScene(string sceneName) { foreach (string roomSceneName in roomSceneNames) { if (string.IsNullOrWhiteSpace(roomSceneName)) { continue; } if (roomSceneName.Trim() == sceneName) { return true; } } return false; } public void RequestRandomSceneChange() { if (SceneLoadManager.Instance == null) { Debug.LogError("SceneLoadManager°¡ ¾ø½À´Ï´Ù."); return; } string nextSceneName = GetNextSceneName(); if (string.IsNullOrEmpty(nextSceneName)) { Debug.LogWarning("À̵¿ÇÒ ´ÙÀ½ ¾À À̸§ÀÌ ºñ¾îÀÖ½À´Ï´Ù."); return; } Debug.Log("·£´ý ¾À À̵¿ ¿äû: " + nextSceneName); SceneLoadManager.Instance.RequestSceneChange(nextSceneName); } public void ResetRoute() { visitedScenes.Clear(); finalSceneUsed = false; Debug.Log("·£´ý ¹æ ¹æ¹® ±â·Ï ÃʱâÈ­"); } }