티스토리 뷰

반응형

많은 게임들에 씬이 바뀌는 사이에 로딩씬이 있다.

 

게임 Loading Scene

 

위와 같은 로딩 씬을 만들어보겠다.

유니티에서 씬 하나를 만들고, UI에서 로딩 막대 Image를 만든다.

이 이미지의 인스펙터에서 Image Type을 Filled로 바꾼다.

 

 

 

LoadingSceneManager이라는 빈 오브젝트를 만들어 스크립트를 새로 작성한다.

유니티 에디터에서 progressBar 변수에 막대 이미지를 할당해준다.

그리고 LoadSceneAsync() 로 비동기화 씬 전환 방식을 사용한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class LoadingSceneManager : MonoBehaviour {

    public static int nextScene;

    [SerializeField]
    Image progressBar;


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

    public static void LoadScene(int index) {
        nextScene = index;
        SceneManager.LoadScene("LoadingScene");
    }

    IEnumerator LoadScene() {
        yield return null;
        AsyncOperation op;
        op = SceneManager.LoadSceneAsync(nextScene);
        op.allowSceneActivation = false;
        float timer = 0.0f;
        
        while(!op.isDone) {
            yield return null;
            timer += Time.deltaTime;
            
            if(op.progress < 0.9f) {
                progressBar.fillAmount = Mathf.Lerp(progressBar.fillAmount, op.progress, timer);
                if(progressBar.fillAmount >= op.progress) {
                    timer = 0f;
                }
            }
            else {
                progressBar.fillAmount = Mathf.Lerp(progressBar.fillAmount, 1f, timer);
                if(progressBar.fillAmount == 1.0f) {
                    op.allowSceneActivation = true;
                    yield break;
                }
            }
        }
    }
}


 

 

 

 

 

그리고 다른 코드에서 호출할 때, 다음과 같이 작성하면 된다. 

인수로 전달할 값은 Build Settings에 있는 각 씬의 인덱스를 정확히 작성합니다.

LoadingSceneManager.LoadScene(1);
반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday