using UnityEngine; using UnityEngine.SceneManagement; public class SceneLoadManager : MonoBehaviour { public static SceneLoadManager Instance { get; private set; } private void Awake() { if (Instance == null) { Instance = this; // 만들어진 자신을 인스턴스로 설정 } else { Destroy(gameObject); // 이미 인스턴스가 있으면 자신을 파괴 } } private void Start() { SceneManager.sceneLoaded += OnSceneLoaded; OnSceneLoaded(SceneManager.GetActiveScene(), LoadSceneMode.Single); } private void OnDestroy() { if (Instance == this) { SceneManager.sceneLoaded -= OnSceneLoaded; } } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { MonoBehaviour[] allObjs = FindObjectsByType(FindObjectsSortMode.None); foreach (var obj in allObjs) { if (obj is ISceneInitializable initializable) { // 씬에서 ISceneInitializable 인터페이스를 가진 오브젝트의 초기화 로직을 실행 initializable.OnSceneLoaded(); } } } }