유니티 로딩 씬 구현

2024. 2. 22. 17:37·Unity

기능 구현의 핵심요소

SceneManager.LoadSceneAsync()

씬이 로드될때까지 동작을 못하는 SceneManager.Load와 달리 씬을 불러오는 도중에 다른 작업이 가능합니다

 

AsyncOperation

현재 로드 되고있는 씬의 정보를 가지고있는 클래스입니다.

코드

 

SceneLoad 매서드를 static으로 만들어서, 어디에서든지 접근할 수 있게 설정합니다.

이후 LoadingSceneController가 생성될때(LoadingScene에서) LoadSceneProcess 함수를 실행시켜

씬이 작동하는 것과 별개로(비동기) 다음에 로드될 씬을 준비합니다.

 

 

사용된 AsycOperation의 프로퍼티 목록

- isDone : 로딩이 완료되었는지

- progress : 로딩 진행률 0% ~ 100%

- allowSceneActivation : 로딩이 완료되었을 때 씬을 로드할 것 인지

 

로딩 진행률에 따라 Slider의 value값을 조정하여 진행도를 보여줬습니다.

단, 로딩이 너무 빠르면 씬이 보이지 않을 수 있기 때문에, 반복문 안에서 임의의 시간을 더 기다리도록 구현했습니다.

더보기
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class LoadingSceneController : MonoBehaviour
{
    [SerializeField] private Slider LoadingBar;
    public static string nextScene;

    public static void SceneLoad(string sceneName)
    {
        nextScene = sceneName;
        SceneManager.LoadScene("LoadingScene");
    }

    private void Start()
    {
        StartCoroutine(LoadSceneProcess());
    }

    IEnumerator LoadSceneProcess()
    {
        //비동기 방식 로드
        AsyncOperation loadScene = SceneManager.LoadSceneAsync(nextScene);
        loadScene.allowSceneActivation = false;

        float timer = 0f;
        while(!loadScene.isDone)
        {
            yield return null;

            if(loadScene.progress < 0.9f)
            {
                LoadingBar.value = loadScene.progress;
            }
            else
            {
                timer += Time.unscaledDeltaTime;
                LoadingBar.value = Mathf.Lerp(0.9f, 1f, timer);
                if (LoadingBar.value >= 1f)
                {
                    loadScene.allowSceneActivation = true;
                    yield break;
                }
            }
        }
    }
}

'Unity' 카테고리의 다른 글

유니티 머티리얼 Emission 활성화, 비활성화  (0) 2024.02.26
유니티 스크립트가 부착이 안될경우  (0) 2024.02.26
유니티 싱글톤 베이스  (0) 2024.02.21
Unity 깃 허브 LFS 오류  (0) 2024.02.21
Unity 머티리얼 옵션  (1) 2024.02.12
'Unity' 카테고리의 다른 글
  • 유니티 머티리얼 Emission 활성화, 비활성화
  • 유니티 스크립트가 부착이 안될경우
  • 유니티 싱글톤 베이스
  • Unity 깃 허브 LFS 오류
하길
하길
게임 개발을 위한 나의 모든 지식의 총 집합체
  • 하길
    Until Dawn
    하길
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (140)
      • Unreal Engine 5 (0)
      • Unity (41)
        • 3D (5)
        • 2D (7)
      • C++ (13)
      • C# (11)
      • 알고리즘 (35)
      • TIL (22)
      • 기타 (1)
      • 대장간 (12)
      • 메모 (2)
      • 게임리뷰 (0)
      • 일상 (0)
        • 챌린지 (0)
      • Article (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
하길
유니티 로딩 씬 구현
상단으로

티스토리툴바