[C#][Unity] Unity SceneManaging 관리

Yoo Hyung Joo ·2023년 10월 28일
1

Unity에서의 Scene 관리
Unity 개발자는 각자 다른 방식들로 Scene을 관리한다. 한 Scene에서 오브젝트만 바꾸어서 Scene을 관리하는 사람들도 있고 유니티에서 제공하는 Scene체계를 통해 Scene을 전환하며 바꾸는 사람도 있다.

나는 두 가지 방식을 섞어가면서 사용하는데 맵 이동이나 간단한 Scene전환은 기존 Scene에서 오브젝트만 바꾸면서 Scene 전환을 이용하고 StartScene이나 게임을 설정해야되는 부분에서는 Scene 전환을 통해 효과적으로 관리한다.

SceneManager가 이미 만들어져있는데 왜 따로 관리를하지?
Unity에서는 SceneManager가 이미 제공되고있다.
ex)

SceneManager.LoadScene(string: sceneName);

이런식으로 간단하게 씬을 전환할 수 있다.

하지만 내가 원한 것은 현재 무슨 씬이 로드됐는지가 궁금한 것이다.
StartScene에서 다음 씬이 전부 로드가 됐을 때 콜백 형식으로 함수를 실행시켜주고 싶은데 이 함수를 실행시키려면은 Unity에서 제공하는 delegate형식을 이용해야한다.

ex)

SceneManager.sceneLoaded += OnSceneLoaded;
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
	Debug.Log(scene.name);
	if (scene.name == ESceneName.GAME.ToString())
	{
   		Debug.Log("OnGameSceneLoaded");
		OnGameSceneLoaded?.Invoke();   
	}
}

SceneManager.sceneLoaded는 씬이 로드 됐을 때 무슨 씬인지 로드된 씬의 모드는 무엇인지 매개변수로 넘겨 알려준다. 이러한 것을 토대로 로드된 씬이 GameScene이면 OnGameSceneLoaded 라는 Actiond을 발행시켜준다. OnGameSceneLoaded에 콜백형식으로 함수들을 넣어주어 간단하게 Scene을 조작할 수 있따.

profile
성장을 멈추지 않는 개발자

0개의 댓글