Image 2개를 더 추가합니다. 두개의 image는 로딩바와 로딩바의 프레임이 됩니다.
두 이미지 파일에 준비해둔 이미지 어셋을 넣어줍니다. 그리고 image component에서 Set Native Size를 눌러줍니다.
로딩바 이미지를 누르고,
-Image component에서 Image Type을 Filled로 바꿉니다.
-아래의 Fill Method를 Horizontal로 바꿉니다.
-Fill Amount를 0으로 바꿉니다.
아래의 LoadingBar 스크립트를 Canvas에 추가 하고 로딩바 이미지를 할당합니다.
미리 준비한 GameStartScene과 SampleScene을 이용해 로딩창이 제대로 실행되는지 시험해봅니다.
File >> Build Settings를 누르고 GameStartScene,SampleScene,LoadingScene을 추가해줍니다.
잘 실행되는지 테스트를 해보면 끝!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LoadingBar : MonoBehaviour
{
public static string nextScene;
[SerializeField] Image progressBar;
// Start is called before the first frame update
void Start()
{
StartCoroutine(LoadScene());
}
public static void LoadScene(string sceneName)
{
nextScene = sceneName;
SceneManager.LoadScene("LoadingScene");
}
IEnumerator LoadScene()
{
yield return null;
AsyncOperation 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;
}
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameStart : MonoBehaviour
{
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
LoadingBar.LoadScene("SampleScene");
}
}
}