Unity에서 씬 전환 없이 로딩 화면 구현하기

김보근·2025년 7월 2일

Unity

목록 보기
109/113

🎮 Unity에서 씬 전환 없이 로딩 화면 구현하기

오늘은 Unity에서 씬 전환 없이 동일한 씬 내에서 로딩 화면을 구현하는 방법을 정리했다.

게임을 하다 보면 씬을 바꾸지 않고 내부에서 데이터나 오브젝트를 비동기로 로드해야 할 때가 있는데, 이때 사용자에게 로딩 중이라는 표시를 해주는 게 UX적으로 중요하다.
예를 들어, 맵 생성, 데이터 로딩, 캐릭터 초기화 등 시간 걸리는 작업이 있을 때 바로 적용 가능하다.

✅ 구현 아이디어

  • 씬을 전환하지 않고, 같은 씬 안에 로딩용 Canvas를 띄운다.

  • 화면을 살짝 어둡게 하기 위해 검은 배경 이미지 + 알파값 0.5 정도로 처리.

  • Image.fillAmount를 활용해서 로딩바처럼 표현.

  • 실제 로딩은 Coroutine으로 진행하면서 진행도 UI를 업데이트.

🧪 구현 방식

  1. 로딩용 Canvas는 평소에는 꺼져 있다가 (SetActive(false)),
    로딩이 시작되면 SetActive(true)로 보이게 만든다.

  2. Image의 fillAmount로 로딩 퍼센트를 시각적으로 표현.

  3. Coroutine을 통해 progress를 천천히 올리면서 로딩 연출을 구현.

💻 코드

public class LocalLoader : MonoBehaviour
{
    public GameObject loadingCanvas;
    public Image fillImage;
    public Text progressText;

    public void StartLoading()
    {
        StartCoroutine(LoadDataCoroutine());
    }

    IEnumerator LoadDataCoroutine()
    {
        loadingCanvas.SetActive(true);

        float progress = 0f;

        while (progress < 1f)
        {
            progress += Time.deltaTime * 0.5f; // 로딩 시간: 약 2초
            fillImage.fillAmount = progress;
            progressText.text = $"{(progress * 100f):F0}%";
            yield return null;
        }

        yield return new WaitForSeconds(0.5f);
        loadingCanvas.SetActive(false);
    }
}

🧠 포인트 정리

  • fillAmount는 0 ~ 1 사이 값을 가지므로 퍼센트 계산도 간단하다.

  • Coroutine으로 시간에 따라 로딩 연출을 구현할 수 있다.

  • 실제 리소스를 로드하거나 생성하는 타이밍에도 활용 가능하다.

  • 씬 전환 없이 로딩 UI를 띄워서 부드러운 사용자 경험 제공 가능!

📝 마무리

Unity에서 꼭 씬을 전환하지 않더라도 로딩 화면처럼 연출할 수 있다는 걸 알게 됐다.
앞으로는 데이터를 비동기로 처리할 때 이런 식으로 사용자에게 기다리는 시간을 명확하게 보여줄 수 있도록 UI를 더 다듬어야겠다.

profile
게임개발자꿈나무

0개의 댓글