728x90
유니티에서는 새로운 장면을 비동기로 로드하는 "LoadSceneAsync" 함수를 제공합니다. 이 함수는 반환값으로 "AsyncOperation" 이라는 비동기작업객체를 반환하는데 이 객체로 비동기 작업이 어디까지 진행되었는지 알 수 있습니다. 이 경우에는 새로운 장면이 얼마나 로드되었는지는 알 수 있겠죠.
필요한 코드만 하나하나 살펴봅시다. 먼저 스페이스바를 누르면 새로운 장면을 로드하는 로직을 만듭니다.
private void Update()
{
if (Input.GetKeyUp(KeyCode.Space))
{
StartCoroutine(LoadSceneCoroutine());
}
}
다음은 새로운 장면을 로드하는 함수입니다. 여기서 눈 여겨볼 부분은 AsyncOperation 객채의 allowSceneActivation 값을 false로 설정해주는것인데, 이는 새로운 장면을 불러오는 작업이 90%완료되었을때 작업을 멈추고 기다리라는 것을 의미합니다. 로드가 완료되었다고 바로 새로운 장면을 로드하는것이 아니라 개발자가 원하는 타이밍에 로드하기 위함이죠. 로드를 완료하려면 allowSceneActivation 값을 다시 true로 설정해주면 됩니다.
private AsyncOperation asyncOperation;
IEnumerator LoadSceneCoroutine()
{
asyncOperation = SceneManager.LoadSceneAsync("Scene_01");
asyncOperation.allowSceneActivation = false;
while (!asyncOperation.isDone)
{
if (asyncOperation.progress >= 0.9f)
{
asyncOperation.allowSceneActivation = true;
}
yield return null;
}
}
위 코드를 활용해 아래와 같은 간단한 로딩화면을 만들 수 있습니다.
728x90
반응형
'Unity > Tip' 카테고리의 다른 글
오브젝트의 중심을 얻는방법 (0) | 2023.03.11 |
---|---|
게임이 시작되기전에 특정 오브젝트를 추가하는 방법 (0) | 2023.03.05 |
World UI가 항상 오브젝트 위에 보이도록 하는방법 (0) | 2023.03.04 |
2D 게임에서 Y축을 기준으로 오브젝트를 정렬하는 방법 (0) | 2023.03.04 |
게임이 정지되었을때 애니메이션 재생하는법 (0) | 2023.02.27 |