Unity의 Scene Load

빵어 ㅣ 2024. 11. 26. 20:29

SceneManager에서 제공하는 LoadScene은 씬의 이름 또는 빌드 인덱스로 씬을 불러올 수 있다.

이때 LoadSceneMode를 프로젝트에 맞게 선택할 수 있다. 

( LoadSceneMode는 생략할 수 있으며 생략 시 LoadSceneMode.Single로 동작하게 된다.)

SceneManager.LoadScene("SceneName");

 

 

LoadSceneMode.Single

SceneManager.LoadScene("SceneName", LoadSceneMode.Single);

 

새로운 씬을 로드하며 현재 로드되어 있는 씬을 언로드한다.

LoadScene의 기본값

 

간단하지만 씬 전환시 끊기는 현상이 발생할 수 있다.

현재 씬을 언로드하며 모든 데이터가 초기화된다.

 

Single 모드를 사용하며 특정 데이터를 유지하려면

DontDestroyOnLoad, ScriptableObject, PlayerPrefs, static 변수로 저장 등의 방법을 사용해야 한다.

 

 

 

LoadSceneMode.Additive

SceneManager.LoadScene("SceneName", LoadSceneMode.Additive);

 

새로운 씬을 로드하며, 현재 로드되어 있는 씬을 그대로 유지한다.

여러 씬을 동시에, 동적으로 관리할 수 있다.

 

메모리 사용량이 그만큼 늘어나며, 상대적으로 씬 간의 관리도 복잡해진다

 

오픈 월드 게임에서 맵을 분리해 최적화하는 방법으로 씬을 분리할 때 사용,

UI를 별도 씬으로 구별해서 관리할 때 사용한다.

 

 

Additive로 로드한 씬은 SceneManager.UnloadSceneAsync으로 언로드 가능하다.

SceneManager.UnloadSceneAsync("SceneName");

 

 

 

Async Load

SceneManager.LoadSceneAsync("SceneName");

 

비동기방식으로 로드

씬 로딩 중에도 게임이 실행된다.

 

로드가 완료되기 전까지는 씬 내 오브젝트에 접근할 수 없는 등 (비동기 로드 중엔 씬의 오브젝트가 활성화되지 않음)

일부 기능에 제한이 생긴다.

 

로딩 화면에 사용하거나 끊김 없는 씬 전환을 해야하는 경우에 사용된다.