반응형
시작하기에 앞서서
https://wergia.tistory.com/194
이 블로그를 참고해서 글을 작성한다
가장핵심이 되는 코드는 아래와 같다
private IEnumerator Load(string sceneName)
{
AsyncOperation op=SceneManager.LoadSceneAsync(sceneName);
//비동기 방식으로 씬을 불러오는 도중에도 다른 작업을 할 수 LoadSceneAsync 함수
//로딩의 진행정도는 AsyncOperation Class로 반환된다
op.allowSceneActivation=false;//로딩이 끝나면 씬을 바로 시작 못하게 한다
float timer=0.0f;
while(!op.isDone)//isDone이 false일 때 동안, 즉 Load가 진행중을 의미한다
{
yield return null;
timer+=Time.unscaledDeltaTime;
if(op.progress<0.9f)//씬 로딩이 90% 미만이라면
{
Bar.fillAmount=Mathf.Lerp(Bar.fillAmount,op.progress,timer);
if(Bar.fillAmount>=op.progress)
{
timer=0f;
}
}
else//씬 로딩이 90% 이상이라면
{
Bar.fillAmount=Mathf.Lerp(Bar.fillAmount,1f,timer);
if(Bar.fillAmount==1.0f)//fillAmount가 다 차면
{
yield return new WaitForSeconds(4.0f);
op.allowSceneActivation=true;
break;
}
}
}
}
처음에 Mathf.Lerp는 무엇인지 몰랐다. 선형보간이라는 건데 간단히말하면 Matf.Lerp(float a,float b,float c)에서
a와 b지점 사이의 (c*100)% 지점을 반환한다. 만약 c가 0.5라면 a+b의 절반값을 반환한다. 만약 c가 1이라면 b값을 반환하고 c가 0이라면 a값을 반환한다. 유니티에서 선형보간은 로딩씬에서 로딩바가 자연스럽게 움직이는데에 보통 사용된다고 한다.
내가 채택한 방식은 참고한 블로그에서 언급한 기준으로 얘기하자면 커튼방식이다. 게임플레이로 넘어가기전 로딩UI를 켜고 그 안에서 Bar게이지가 차는 모습을 보여주는 것이다. LoadSceneAsync는 주석에 달았듯이 씬을 불러오면서 다른 작업을 진행할 수 있고 어느정도 불러왔는지도 AsyncOperation Class를 통해 알 수 있게 해준다.
op.allowSceneActivation=false로 지정해줘서 씬을 다 로드해도 바로 실행되지는 않게 해준다. 나 같은 경우엔 워낙 불러오려는 씬이 가벼워서 로딩이 순식간에 끝나서 도중에 yield return new WaitforSeconds(4.0f)를 써서 로딩이 완료되서 bar가 100%다 차도 4초정도 기다리게 해줬다.
아래는 실행영상이다
댓글과 지적은 언제든지 환영입니다~!
반응형
'유니티 > 2D러닝액션(모바일)' 카테고리의 다른 글
유니티 모바일에서 네트워크 연결 확인 (0) | 2022.03.21 |
---|---|
유니티 2D싱글톤 패턴 (0) | 2021.12.24 |
현재점수 최고점수 (0) | 2021.11.03 |
유니티 리모트5 사용 및 기본 버튼생성 (0) | 2021.10.25 |