Scene을 비동기로 로딩 및 전환하기

Youngmin Go·2024년 9월 10일
0
post-custom-banner

유니티 시스템 프로그래밍이라는 인프런의 강의를 보고 학습하는 내용을 정리하고 기록하는 글입니다.

Unity 시스템 프로그래밍 학습 기록 - 섹션 3
이번 섹션 3에서는 Title 씬 구성, 로고 및 타이틀 화면 처리(TitleManager), 그리고 Lobby 씬 비동기 로딩 및 전환(TitleManager, SceneLoader)에 대해 배웠습니다.

이번 강의를 통해 새롭게 알게 된 정보는 Unity의 meta 파일과 비동기 로딩(AsyncOperation)입니다. 그동안 프로젝트를 진행하며 에셋 번들이나 파일 위치를 변경할 때 meta 파일을 자주 접했지만, 이번 기회를 통해 meta 파일이 Unity 파일의 설정 값과 리소스의 메타데이터를 저장하는 데 사용된다는 것을 상세히 이해할 수 있었습니다.

또한, 이번 섹션에서 가장 큰 배움은 AsyncOperation을 통한 비동기 작업이었습니다. 지금까지 진행해 온 프로젝트들은 모두 동기적 작업 방식이었기 때문에, 비동기적 작업 방식은 이번에 처음 접하게 되었는데요. 이 방법을 활용하면 이전 프로젝트에서 발생한 타이틀 화면에서 데이터베이스 정보를 받아오기 전에 게임이 시작되는 오류를 해결할 수 있을 것 같다는 생각이 들었습니다. 예를 들어, 타이틀 화면에서 로딩 바를 통해 작업이 완료되지 않으면 다음 화면으로 넘어가지 못하게 구현할 수 있습니다.

또한, 항상 게임을 하며 궁금했던 로딩 바의 작동 원리도 이해할 수 있었습니다. 로딩 바는 자료를 하나씩 다운로드하는 것이 아니라, AsyncOperation.progress를 통해 로딩 진행 정도를 파악하고 이를 바 형태로 시각화하는 방식이라는 것을 알게 되었습니다.

이번 학습은 Unity에서 비동기적 작업의 중요성을 깨닫고, 게임 개발 시 사용자 경험을 향상시키기 위한 방법을 탐구하는 좋은 계기가 되었습니다. 앞으로의 프로젝트에서도 이러한 비동기 로딩 방식을 적극 활용해보고 싶습니다.

LoadingSlider.value = 0.5f; //0이 아닌이유가 로딩이 빠른 게임이면 0에서 시작하면 너무 빨라서 0.5로 한거임
LoadingProgressText.text = $"{(int)(LoadingSlider.value * 100)}%";
yield return new WaitForSeconds(0.5f);

while(!m_AsyncOperation.isDone) //로딩이 진행 중일 때
{
    LoadingSlider.value = m_AsyncOperation.progress < 0.5f ? 0.5f : m_AsyncOperation.progress;
    LoadingProgressText.text = $"{(int)(LoadingSlider.value * 100)}%";

    //씬 로딩이 완료되었다면 로비로 전환하고 코루틴 종료
    if (m_AsyncOperation.progress >= 0.9f)
    {
        m_AsyncOperation.allowSceneActivation = true;
        yield break;
    }

    yield return null;
}
post-custom-banner

0개의 댓글