프로젝트/스네이크 프로젝트

[스네이크] - 비동기 씬전환, 페이드 효과

MuscleDeveloper5683 2024. 12. 10. 17:05
728x90
SMALL

 

지난 글에서 로비씬에서 UI추가 및 닉네임 저장관련을 했는데 

 

이번글에선 연출효과(페이드 효과) 및 비동기 씬 전환에 대해 추가해주자.

 

 

비동기 씬 전환 (Asynchronous Scene Loading) 

Unity의 비동기 씬 전환은 게임이 실행 중일 때 메인 스레드가 멈추지 않고 새 씬을 로드할 수 있도록 해주는 기능이다. 일반적으로 SceneManager.LoadSceneAsync 메서드를 사용하여 씬을 로드한다. 이 방식을 사용하면 로딩 중에도 게임이 계속 실행되며, 특히 로딩 화면이나 페이드 효과 같은 UX 요소를 추가할 때 유용하다.

 

주요 특징

  1. 점진적 로딩 : 씬이 한 번에 로드되지 않고, 로드 진행률(AsyncOperation.progress)에 따라 점진적으로 로드된다.
  2. 씬 활성화 지연 가능 : allowSceneActivation 속성을 사용하여 씬을 메모리에 로드한 후에도 사용자가 지정한 시점까지 씬 활성화를 보류할 수 있다.
  3. 프레임 단위 진행  : 비동기 방식으로 실행되므로 게임의 메인 루프는 멈추지 않는다.

 

비동기 씬 전환의 이점

  • 부드러운 사용자 경험: 로딩 화면, 애니메이션 또는 페이드 효과와 결합하여 매끄러운 화면 전환을 제공한다.
  • 프레임 유지: 메인 스레드가 멈추지 않으므로, 로딩 중에도 다른 작업(애니메이션, 입력 처리 등)을 수행할 수 있다.
  • 효율적 리소스 관리: 씬 활성화를 지연하여 필요한 타이밍에만 씬을 보여줄 수 있다.

 

 

 

1. 사용할 페이드 이미지 생성

 

 

 

2. 로비 매니저에 페이드 이미지 추가

 

 

 

3. 페이드 효과 코드 추가

 

 

 

 

 

 

 

4. 페이드 적용 및 비동기 씬 전환

 

비동기 씬 전환을 사용하기 위해 네임스페이스 추가

 

 

 

아래 코드의 비동기 씬 전환 방식의 장점

  1. 페이드 효과와 연계 : 씬 전환 시 시각적 매끄러움을 제공하여 사용자 경험을 향상한다.
  2. 닉네임 저장과 비활성화 처리 : 닉네임 입력이 완료된 후 저장 및 UI 비활성화를 통해 로딩 중 사용자 입력을 방지한다.
  3. 씬 활성화 제어 : allowSceneActivation 속성을 활용해 페이드 효과 완료 후에만 씬을 활성화하여 로딩 완료 타이밍을 조정한다.

 

 

 

1. 비동기로 씬 로드

AsyncOperation async = SceneManager.LoadSceneAsync(sceneName);
  • SceneManager.LoadSceneAsync(sceneName)를 호출하여 새로운 씬을 비동기로 로드한다.
  • 이 작업은 즉시 시작되며 AsyncOperation 객체를 반환, 이를 통해 로드 진행률과 활성화 상태를 제어할 수 있다.

 

2. 씬 활성화 지연

async.allowSceneActivation = false;
  • allowSceneActivation을 false로 설정하여 씬이 로드 완료된 후에도 자동으로 활성화되지 않도록 한다.
  • 이는 로딩 애니메이션, 페이드 효과와 같은 작업을 수행한 후 직접 활성화할 수 있도록 한다.

 

3. 페이드 효과와 연계

yield return StartCoroutine(FadeIn());
async.allowSceneActivation = true;
  • 페이드 인 효과를 실행(FadeIn)하여 화면 전환이 부드럽게 보이도록 한다.
  • 페이드 인이 완료된 후, async.allowSceneActivation = true를 호출하여 씬을 활성화한다.

 

 

 

결과

 

728x90