Unity에는 SceneManager라는 전역 static 클래스가 존재합니다. 이 클래스는 씬 전환과 관련된 기능들을 담당하며, 그 중에서도 sceneLoaded라는 이벤트는 새로운 씬이 로드되었을 때 자동으로 호출되는 이벤트입니다.
이벤트이기 때문에 += 연산자를 통해 간단히 원하는 메서드를 등록할 수 있으며, 이벤트가 발생하면 해당 메서드가 자동으로 호출됩니다.
언제 사용해야 할까?
SceneManager.sceneLoaded 는 보통 다음과 같은 경우에 사용됩니다
* scene 전환 이후 특정 데이터를 다시 설정하거나 초기화해야 할 때
* singleton 매니저가 scene 내 오브젝트를 다시 찾거나 데이터를 새로 준비할 필요가 있을 때
* 매번 scene 이 바뀔 때마다 공통적인 작업을 자동으로 처리해야 할 때
호출 시점은 언제일까?
sceneLoaded 이벤트는 새 씬의 오브젝트들이 Awake()와 OnEnable()을 마친 후, Start()가 호출되기 전에 실행됩니다. 즉, 오브젝트가 전부 생성되어 있는 상태이므로 GameObject.Find()를 사용해도 안전하고, 데이터 초기화나 오브젝트 참조를 설정하기에 가장 안정적인 타이밍입니다.
Scene 이 unload 될 때 호출되는 이벤트는?
SceneManager.sceneLoaded 와 짝을 이루는 이벤트로는 SceneManager.sceneUnloaded가 있습니다.
이 이벤트는 현재 씬이 메모리에서 완전히 제거되었을 때 호출됩니다.
즉, LoadScene()이나 LoadSceneAsync() 등을 통해 씬을 전환하거나 제거할 때, 이전 씬이 완전히 언로드되면 sceneUnloaded 이벤트가 실행됩니다.
SceneManager.sceneUnloaded += OnSceneUnloaded;
void OnSceneUnloaded(Scene scene)
{
Debug.Log($"scene unloaded : {scene.name}");
}
이 이벤트는 리소스 해제, 상태 정리, 로그 출력 등 씬이 끝날 때 처리해야 할 작업을 넣기에 적절한 타이밍입니다.
주의할 점은, sceneUnloaded 는 해당 씬의 오브젝트가 이미 제거된 상태에서 호출되기 때문에, scene 안의 오브젝트에 직접 접근하려 하면 오류가 발생할 수 있습니다.
대신, 정리 대상이 싱글톤이나 외부 관리 오브젝트라면 여기서 안전하게 처리할 수 있습니다.
마무리
Scene 이 전환될 때마다 특정 데이터를 초기화하거나, 싱글톤 매니저가 씬 내 오브젝트와 상호작용해야 하는 구조라면 SceneManager.sceneLoaded 는 가장 안전하고 실용적인 방법입니다.
반대로, scene 이 종료될 때 어떤 작업을 하고 싶다면 sceneUnloaded를 활용하면 됩니다.
초기화를 Awake()나 Start() 에서 처리하려다 놓치는 문제가 있다면, 이벤트 기반으로 전환하는 것이 좋은 해결책이 될 수 있습니다.
'Unity' 카테고리의 다른 글
Unity 에서 지체없이 Play Mode 로 진입하는 방법 (0) | 2025.04.14 |
---|---|
Audio Clip 을 Dictionary 로 관리하기 : Serializable 과 List 활용 (0) | 2025.04.08 |
Scene 전환 시, 오브젝트 연결이 끊어지는 이슈 해결 방법 (0) | 2025.04.05 |
유니티에서 플레이 모드인지 아닌 헤깔릴 때 (0) | 2025.04.05 |
유니티에서 Resources 폴더에 대해 알아보기 (0) | 2025.03.31 |