728x90
**비동기로 씬을 로딩하는 이유
: 동기로 씬을 가져올 경우 한 장면에 있는 모든 정보들을 불러오기 때문에 시간이 길어져서 사용자에게 불쾌한 경험을 줄 수 있음. 따라서 비동기적인 방법으로 씬을 로드함
App (App씬)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class App : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
void Start()
{
//비동기 씬로드
AsyncOperation oper = SceneManager.LoadSceneAsync("Title");
oper.completed += (obj) =>
{
TitleMain titleMain = GameObject.FindObjectOfType<TitleMain>();
titleMain.onLoadComplete = () =>
{
Debug.Log("Stage1 씬으로 이동");
};
titleMain.Init();
};
}
// Update is called once per frame
void Update()
{
}
}
TitleMain (Title 씬)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class TitleMain : MonoBehaviour
{
[SerializeField]
private Image loadingBar;
private float percent = 0f;
public UnityAction onLoadComplete;
public void Init()
{
Debug.Log("Init");
}
private void Start()
{
Debug.Log("Start");
this.StartCoroutine(this.CoLoading());
}
private IEnumerator CoLoading()
{
Debug.Log("load start");
while (true)
{
//시간이 흐를때마다 퍼센트 증가
percent += Time.deltaTime;
//증가한 퍼센트 만큼 로딩바 채워짐
loadingBar.fillAmount = percent;
if(percent >= 1)
{
break;
}
yield return null;
}
Debug.Log("load complete!");
this.onLoadComplete(); //대리자 호출
}
}
'KDT > 유니티 심화' 카테고리의 다른 글
23/09/03 [주말] HeroShooter 총알 발사 (1) | 2023.09.03 |
---|---|
23/08/31 Input System 연습 (0) | 2023.08.31 |
23/08/29 TestAreaMask (0) | 2023.08.29 |
23/08/27 [주말과제] HeroShooter Stage1 미완 (0) | 2023.08.27 |
23/08/24 HeroShooter 사정거리 안에 몬스터 감지 (0) | 2023.08.24 |