SceneManager.sceneLoaded

Noke·2025년 6월 19일

Unity TIL

목록 보기
25/31

오늘은 씬 매니저의 SceneManager.sceneLoaded를 활용해서 어떤 문제를 어떻게 해결했는 지에 대해 작성해 볼 것이다.


❓ 게임 스타트 시점

이번 프로젝트에서 다른 분께서 로딩 중일 때의 씬을 만들어 주셨다. 그런데, 게임을 시작하거나 재시작할 때 문제가 생겼다.

현재, 게임 매니저에서 GameStart() 메서드를 통해서 게임 시작을 관리하고 있었다. 그런데, 로딩 씬을 불러온 다음에 메인 씬을 실행하는 메서드는 있었지만, 이후에 게임을 시작해야 되는 문제가 발생했다.

그렇다고 해서 로딩 씬을 관리하는 스크립트에서 조건문을 통해 메인 씬을 불러올 때, 게임 시작 메서드를 불러와서 실행하는 것은 좀 아니라고 생각했다.

그래서, 이번에는 SceneManager.sceneLoaded를 활용해 보았다.


✅ SceneManager.sceneLoaded

연결

위와 같이, SceneManager.sceneLoaded<Scene, LoadSceneMode>로 구성되어 있어서 아래와 같이 메서드를 만들어서 이벤트에 등록해 주었다. 이는 델리게이트 형식으로 등록 해주어야 하는데, 씬이 로딩될 때마다 호출이 된다.

private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    if(scene.buildIndex == 2)
        StartGame();
    else
        MapManager.Instance().OnMainSceneUnloaded();
}

위의 메서드는 단순하게, 메인 씬(현재 2번 인덱스)일 때는 게임을 시작하고, 다른 씬에서는 맵 매니저의 맵을 안 보이게 하는 것이다.


✨ 마무리

위와 같이, 간단한 코드를 통해서 문제를 해결할 수 있었다. 또한, 델리게이트 형식을 원래 잘 사용을 안 해봤었는데, 뭔가 써 봐서 뿌듯했다.

profile
유니티 개발자(진)

0개의 댓글