씬 이동

ㅋㅋ·2022년 6월 11일

유니티강의

목록 보기
21/24
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는 함수 그대로 씬이 로드되고 언로드될 때 이벤트 발생

씬 로드 시 두가지 모드가 있으며 아래와 같다.

  • Additive 기존 씬을 언로드하지 않고 새로운 씬을 로드
  • Single 기존 씬을 언로드하고 액티브 씬을 교체하고 다음 씬을 로드

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 함수를 이용하여 비동기 로드를 할 수 있다.

0개의 댓글