using UnityEngine.SceneManagement;
void Start()
{
SceneManager.activeSceneChanged += OnActiveSceneChanged;
SceneManager.sceneLoaded += OnSceneLoaded;
SceneManager.sceneUnloaded += OnSceneUnloaded;
}
public void OnActiveSceneChanged(Scene scene0, Scene scene1)
{
Debug.Log("OnActiveSceneChanged is called, scene0 : " + scene0.name + ", scene1 : " + scene1.name);
}
public void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode)
{
Debug.Log("OnSceneLoaded is called, scene : " + scene.name + ", loadSceneMode : " + loadSceneMode.ToString());
}
public void OnSceneUnloaded(Scene scene)
{
Debug.Log("OnSceneUnloaded is called, scene : " + scene.name);
}
씬을 동시에 두 가지 이상 들고 있는 경우가 있다.
이 때 activeScene이 바뀌는 경우 activeSceneChanged의 이벤트가 발생한다.
sceneLoaded와 sceneUnloaded는 함수 그대로 씬이 로드되고 언로드될 때 이벤트 발생
씬 로드 시 두가지 모드가 있으며 아래와 같다.
BaseSceneMain baseSceneMain = GameObject.FindObjectOfType<BaseSceneMain>();
FindObjectOfType는 해당 클래스나 클래스를 상속한 객체를 찾아 반환한다.
IEnumerator LoadSceneAsync(string sceneName, LoadSceneMode loadSceneMode)
{
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName, loadSceneMode);
while (asyncOperation.isDone == false)
{
yield return null;
}
}
SceneManager의 LoadSceneAsync 함수를 이용하여 비동기 로드를 할 수 있다.