EunGyeongKim

[unity]비동기 로딩 화면 최적화 본문

기타 컴퓨터/Unity

[unity]비동기 로딩 화면 최적화

EunGyeongKim 2025. 2. 3. 21:29

이번 글에서는 Unity에서 검은 화면 없이 자연스러운 씬 전환을 위한 LoadingManager.cs 최적화 방법을 다룹니다.

🚀 최적화된 씬 전환 흐름

  • 스플래시 화면 → 자동으로 LoadingScene으로 이동
  • LoadingScene에서 최소 1.5초 유지 (비동기 로딩 진행)
  • 로딩 완료 후 LoginScene으로 부드럽게 전환

💡 문제: 검은 화면 없이 자연스럽게 씬 전환

Unity에서 씬 전환 시 비동기 로딩을 적용하지 않으면 로딩 중 검은 화면이 길어질 수 있습니다.

이를 해결하려면 SceneManager.LoadSceneAsync()를 활용하여 로딩 화면을 유지한 채 씬을 비동기 로드하는 방식이 필요합니다.

✅ 최적화된 LoadingManager.cs 코드


using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class LoadingManager : MonoBehaviour
{
    public GameObject loadingCanvas; // 🔹 로딩 UI
    public float minLoadingTime = 1.5f; // 🔹 최소 로딩 시간

    private void Start()
    {
        loadingCanvas.SetActive(true); // 🚀 로딩 화면 활성화
        StartCoroutine(LoadLoginScene());
    }

    private IEnumerator LoadLoginScene()
    {
        float startTime = Time.time; // 🚀 로딩 시작 시간

        // 🔹 비동기 방식으로 "LoginScene" 로드 (씬 활성화는 보류)
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("LoginScene");
        asyncLoad.allowSceneActivation = false;

        // 🚀 최소 로딩 시간 보장 (1.5초 이상 로딩 화면 유지)
        while (Time.time - startTime < minLoadingTime || !asyncLoad.isDone)
        {
            if (asyncLoad.progress >= 0.9f && Time.time - startTime >= minLoadingTime)
            {
                yield return new WaitForSeconds(0.5f); // 🚀 부드러운 전환 효과 추가
                asyncLoad.allowSceneActivation = true; // 🚀 씬 활성화
            }
            yield return null;
        }

        // 🚀 씬이 완전히 로드된 후 로딩 UI 숨기기
        loadingCanvas.SetActive(false);
    }
}

🎯 최적화된 비동기 로딩 방식

  • SceneManager.LoadSceneAsync() 사용하여 백그라운드에서 씬을 로드
  • 로딩이 90% 이상 완료될 때까지 allowSceneActivation = false 설정
  • 최소 1.5초 동안 로딩 화면 유지하여 짧은 씬 로드에도 로딩 화면이 너무 빨리 사라지는 현상 방지
  • yield return new WaitForSeconds(0.5f) 추가로 전환이 더 자연스럽게 진행

✨ 결과: 스플래시 → 로딩 → 로그인 화면으로 자연스럽게 전환

이제 Unity 프로젝트에서 검은 화면 없이 부드러운 씬 전환이 가능합니다! 🚀

Comments