240216-TIL

2024. 2. 16. 21:09내일배움캠프

2월 16일

 

오늘로 이번 팀 프로젝트도 마무리가 되었다.

 

오늘은 이번 팀 프로젝트에서 필요에 의해 내가 열심히 인터넷과 영상을 보며 만들어 보았고

 

시간에 쫓겨 채 이해를 하기도 전에 코드부터 급하게 따라 만들어 보았던 내용에 대해서

 

TIL로 정리하면서 다시 한번 뇌새김 하는 과정을 밟아보도록 하자.

 

AsyncOperation

더보기

이번 프로젝트에서 UI를 담당하게 되었고 버튼 클릭에 따라

 

이씬 저씬 이동하는걸 테스트 하고 또 만들고 하다보니

 

로딩씬을 만들어야 겠구나 라고 생각하여 만들었다.

 

뭐 로딩 씬을 따로 구성하느냐 로딩 UI를 구성해서 보여주느냐에 따라 방식에 차이는 있겠지만

 

이번에 내가 만든 로딩방식은 로딩에 관련된 씬을 하나 만들어서 1번씬 에서 2번씬으로 이동하기 전에!

 

로딩씬 보여주는 방식으로 만들어보았다.

 

자 여기서 게임은 다양한 씬들의 흐름으로 구성되고 다양한 오브젝트들의 계층적인 구조로 표현되는데

 

지금 씬에서 다음 장면으로 이동하기 위해서는 해당 장면을 구성하는 모든 오브젝트와 리소스들이

 

미리 준비되어 있어야 한다.

 

유니티에서 SceneManager.LoadScene() 를 호출하면 유니티는 해당 장면의 모든 정보를

 

메모리로 가져오기 전까지 다른 작업을 하지 못하는데 이러한 문제를 해결하기 위해 

 

'AsyncOperation' 라는 비동기적인 연산을 위한 코루틴을 제공하고 있다.

 

모르는게 나왔으면 당연히 펼쳐보는게 Unity Documetation이다

 

https://docs.unity3d.com/ScriptReference/AsyncOperation.html

 

Unity - Scripting API: AsyncOperation

AsyncOperation class in UnityEngine / Inherits from:YieldInstruction / Implemented in:UnityEngine.CoreModule Description Asynchronous operation coroutine. Properties allowSceneActivationAllow Scenes to be activated as soon as it is ready. isDoneHas the ope

docs.unity3d.com

 

자세히 한번 보자

 

 

자 위에 설명했던 대로 나와있는걸 확인할 수 있는데

 

AsyncOperation 객체에 제공하는 변수의 목록은 다음 이미지와 같다

 

 

 

 

해당 내용을 참고해서 이런 코루틴을 하나 만들어 주었다

 

여기서 SceneManager.LoadSceneAsync()는 백그라운드에서 장면을 비동기적으로 로드할때 쓰인다

 

AsyncOpertaion 을 사용하여 작업이 완료되었는지 확인할 수 있다.

 

aloowSceneActivation을 true로 놓아도 되겠지만 그렇게 되면 작업이 완료되는 즉시 다음씬이 바로 로드되는데

 

이때 문제점은 내 생각보다 씬 로드가 빨리 끝나는 경우이다.

 

그럴땐 로딩씬이 잠깐 깜빡이다 바로 다음씬으로 넘어가기 때문에 로딩씬이 있어야할 이유가 사라지게 된다.

 

그렇기에 일단 false로 놓고 내가 원하는 타이밍에 true로 바꿔주어 다음 씬을 보여주도록 하자

 

 

작성한 다음 코드를 보자 isDone 은 작업이 완료되었는지의 여부를 묻는 bool 값을 가진다.

 

그렇기에 작업이 완료되지 않았을때? While문을 돌면서 해당 While문 안의 내용을 실행시켜 준다.

 

이때 yield return null을 주고 While문을 한번 돌때마다 유니티에게 주도권을 넘겨주어 

 

로딩바가 차오르게끔 해주자. 그리고 op.pogress 가 0.9보다 작을때

 

progress는 작업의 진행정도를 0~1값으로 확인이 가능하다. 0.9보다 작을때라는건 작업이 90%정도일 때까지

 

내가 설정한 로딩바의 fillAmount 값이 op.progress 값 즉 작업이 완료된만큼 차오르게 만들고

 

나머지 10%의 남은 로딩바는 내가 설정한 값만큼의 로딩바를 천천히 차게 만들어서 

 

너무 빨리 다음씬이 준비가 되었어도 Fake를 주어 적당한 시간만큼의 로딩이 진행되고 있음을 표현해주었다.

 

 

적당한 팁글도 로딩바 위에 보여주기 위해서 string 배열로 팁을 적어두고

 

입력된 문구를 랜덤하게 골라서 text에 표시되는 작업까지 마치면

 

어느정도 볼만한 로딩씬이 만들어지게 된다.

 

 

완성!

 

오늘은 로딩씬을 만들어보면서 어 이게 뭐지 했던 AsyncOperation 에 대한 정리와

 

어떤 방식으로 스크립트를 작성해서 로딩씬을 만들었는지에 대해 정리해 보았다.

 

동기 비동기 방식은 예전 TIL에 살짝 정리를 했었어서 그런지 이해하는데 큰 문제는 없었던것 같다.

 

2월 16일 TIL은 여기서 마치도록 하겠다.

 

 

 

'내일배움캠프' 카테고리의 다른 글

240220-TIL  (0) 2024.02.20
240219-TIL  (0) 2024.02.19
240215-TIL  (0) 2024.02.15
240214-TIL  (0) 2024.02.14
240213-TIL  (0) 2024.02.13