방명록
- 유니티 게임개발 - 최종 프로젝트 #42023년 10월 26일 21시 48분 46초에 업로드 된 글입니다.작성자: noun06
메인메뉴, 로비, 인게임 씬을 유동적으로 관리하는 씬매니저를 제작하였다.
우선 열거형으로 게임 내 사용할 여러 씬을 정의하였다.
Scene 열거형을 인수로 받아 씬을 비동기로 로드하는 LoadSceneAsync메서드를 코루틴으로 호출한다.
LoadSceneAsync 메서드는 비동기로 씬을 로드하고 로딩바 창을 표시하는 역할을 한다.
private IEnumerator LoadSceneAsync(string sceneName) { progressSlider.value = 0; loaderUI.SetActive(true); AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName); asyncOperation.allowSceneActivation = false; float progress = 0; while (!asyncOperation.isDone) { progress = Mathf.MoveTowards(progress, asyncOperation.progress, Time.deltaTime); progressSlider.value = progress; if (progress >= 0.9f) { progressSlider.value = 1; asyncOperation.allowSceneActivation = true; } yield return null; } }
AsyncOperation은 유니티에서 비동기 작업을 처리하는 데 사용되는 클래스이다.
주로 씬 로딩, 에셋 번들 로딩, 데이터 다운로드 등 실행시간이 있는 작업을 수행할 때 사용된다고 한다.
주로 SceneManager.LoadSceneAsync() 메서드와 함께 사용되어 로드하는 객체를 반환한다.
나는 비동기 루프 방식으로 코루틴 반환을 통해 작업을 추적하고 화면을 업데이트하였다.
처음에는 단순하게 UX적인 측면에서 사용자에게 씬 전환을 인지시키려는 용도로 기능을 추가하고 싶었다.
하지만 그 부분과 더불어 비동기 작업을 통해 게임의 성능을 향상시키는데 큰 이점이 있다고 느꼈다.
다음글이 없습니다.이전글이 없습니다.댓글