본문 바로가기
유니티 공부/Unity

Unity - AsyncOperation을 사용해서 Scene 전환하면서 로딩화면 나오게 하는 법

by 코딩하는 돼징 2023. 6. 18.
반응형

AsyncOperation

비동기 작업을 수행하는 클래스이다. 


비동기적(Asynchronous) 작업이란?

작업은 작업이 완료될때까지 기다리지 않고 다른 작업을 동시에 수행하는 작업 방식이다. 보통 리소스 로딩, Scene전환 등과 같이 오래 걸리는 작업을 처리할때 사용된다. 이에 따라 사용자 인터페이스 응답성을 향상시키고, 전반적인 성능을 개선시킬 수 있다.


01 SceneManager.LoadSceneAsync

비동기적으로 Scene을 Load한다.

AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName);

LoadSceneAsync 메서드를 호출하면 비동기 작업을 시작하고, AsynOperation객체가 반환된다. 이는 Scene로딩 작업의 진행 상태와 완료 여부를 추적할 수 있다.


02 isDone

AsyncOperation 객체를 사용하면 비동기 작업의 완료 여부를 확인할 수 있다. 작업이 완료되면 true를 반환하고 완료되지 않은 경우 false를 반환한다.

while(!ayncLoad.isDone)
{
    yield return null;
}

03 progress

AsyncOperation 객체를 사용하면 비동기 작업의 진행 정도를 확인할 수 있다. 일반적으로 0부터 1사이의 숫자로 정규화되어있으며 작업이 완료되기 전까지의 진행 정도를 백분율로 나타낼 수 있다.

float progress = asyncOperation.progress;
int progressPercentage = Mathf.RoundToInt(progress * 100f);
loadingText.text = "Loading progress: " + progressPercentage.ToString() + "%";

씬 전환을 하면서 로딩화면을 보여주는 코드 예시

public GameObject loadingScreen;

public void LoadSceneWithLoadingScreen(string sceneName)
{
    StartCoroutine(LoadSceneAsync(sceneName));
}
private IEnumerator LoadGameSceneAsync()
{
    // 로딩 화면 보여주기
    loadingScreen.SetActive(true);
    
    // 비동기 씬 로딩 시작
    AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("sceneName");
     
    // 로딩 진행 상태 확인
    while (!asyncLoad.isDone)
    {
        // 진행 상태를 보여주는 기능 추가 가능
        yield return null;
    }

    // 씬 로딩 완료 후 로딩 화면 숨기기
    loadingScreen.SetActive(false);
 }

 

반응형

댓글