유니티 비동기 로딩 1편 - 로딩 씬 만들기

2020. 5. 5. 19:54유니티실습

반응형

안녕하세요 유니티 비기너입니다.

오늘 준비한 주제는 SceneManager.LoadSceneAsync를 이용한 비동기 로딩 씬입니다.

 

Unity에서 Scene이 로드되면 Scene에 포함되는 Asset들이 메모리상에 올라가며

다음 Scene으로 넘어가는 경우에 이전 Scnen에 사용되지 않는 리소스들은

메모리에서 해제된다고 합니다.

 

그러므로 로딩 신을 이용하여 Asset 리소스가 많은

Scene에 적절하게 사용하면 좋을 것 같습니다.

 

씬 화면

 

Slider오브젝트와 Text 오브젝트를 만들고 다음과 같이 화면을 구성하였습니다.

 

 

먼저 슬라이더의 하위계층 중 Handle Slide Area의 자식 오브젝트를 제거해줍니다.

 

 

Fill 오브젝트는 슬라이더가 채워졌을 때 보이는 색상을 나타냅니다.

원하는 색깔로 변경합니다.

 

 

슬라이더 컴포넌트의 Value 값을 조정하여 Loading Bar의 진행상황을 표현합니다.

 



스크립트 LoadingSceneManager

public class LoadingSceneManager : MonoBehaviour
{
    public Slider slider;
    public string SceneName;

    private float time;

    void Start() {
        StartCoroutine(LoadAsynSceneCoroutine());   
    }

    IEnumerator LoadAsynSceneCoroutine() {

        AsyncOperation operation = SceneManager.LoadSceneAsync(SceneName);

        operation.allowSceneActivation = false;

        

        while (!operation.isDone) {

            time =+ Time.time;

            slider.value = time / 10f;

            if(time > 10) {
                operation.allowSceneActivation = true;
            }

            yield return null;
        }

    }

}

 

위 코드는 SceneManager.LoadSceneAsync을 사용하여 장면을 비동기적으로 로드를 시작하고

allowSceneActivation을 false로 변경하여 로드가 완료되어도 장면이 전환되지 않도록 막아놨습니다.

 

로딩이 진행되는 부분을 좀 더 긴 시간으로 표현하고 싶어서 Time.time을 사용하여 10초가 경과하면

allowSceneActivation을 true로 변경하면서 장면 전환을 허용하도록 구현했습니다.

 

allowSceneActivation

로딩이 완료되는 대로 장면이 활성화되도록 합니다.

 

isDone

로딩의 완료 여부를 확인합니다.

 

progress

로딩의 진행상황을 확인합니다.

 

 

결과 화면

 

 

 

반응형