49 lines
1.2 KiB
C#
49 lines
1.2 KiB
C#
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<MonoBehaviour>(FindObjectsSortMode.None);
|
|
|
|
foreach (var obj in allObjs)
|
|
{
|
|
if (obj is ISceneInitializable initializable)
|
|
{
|
|
// 씬에서 ISceneInitializable 인터페이스를 가진 오브젝트의 초기화 로직을 실행
|
|
initializable.OnSceneLoaded();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|