티스토리 뷰
반응형
많은 게임들에 씬이 바뀌는 사이에 로딩씬이 있다.
위와 같은 로딩 씬을 만들어보겠다.
유니티에서 씬 하나를 만들고, 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);
반응형
댓글