언리얼 엔진에서 레벨 간 이동시 로딩 화면을 구현하기 위해서는 "Async Loading"을 활용하는 것이 일반적입니다. Async Loading은 새로운 레벨의 로드를 비동기로 처리하여, 메인 스레드가 블로킹되지 않도록 합니다. 이렇게 하면 로딩 화면을 표시하는 동안도 게임이 정상적으로 동작하게 됩니다.
다음은 로딩 화면을 구현하는 기본적인 과정입니다:
로딩 화면 레벨 생성: 로딩 화면을 위한 레벨을 따로 생성합니다. 이 레벨에서는 로딩 화면에 표시될 요소들을 배치합니다.
레벨 이동 함수 작성: 레벨 간 이동을 관리하는 함수를 작성합니다. 이 함수에서는 먼저 로딩 화면 레벨로 이동한 후, 비동기로 목적지 레벨을 로드합니다.
void YourClass::ChangeLevel(FName LoadingLevelName, FName DestinationLevelName)
{
// 로딩 화면 레벨로 이동
UGameplayStatics::OpenLevel(this, LoadingLevelName);
// 비동기로 목적지 레벨 로드
FLatentActionInfo LatentInfo;
LatentInfo.CallbackTarget = this;
LatentInfo.ExecutionFunction = "OnLevelLoadCompleted";
LatentInfo.Linkage = 0;
LatentInfo.UUID = UUID++;
UGameplayStatics::LoadStreamLevel(this, DestinationLevelName, true, true, LatentInfo);
}
레벨 로드 완료 콜백 함수 작성: 레벨 로드가 완료되었을 때 호출되는 콜백 함수를 작성합니다. 이 함수에서는 로딩 화면 레벨을 언로드하고, 목적지 레벨을 활성화합니다.
UFUNCTION()
void YourClass::OnLevelLoadCompleted()
{
// 로딩 화면 레벨 언로드
UGameplayStatics::UnloadStreamLevel(this, LoadingLevelName, FLatentActionInfo(), false);
// 목적지 레벨 활성화
UGameplayStatics::OpenLevel(this, DestinationLevelName);
}
위 코드는 기본적인 구조를 제시한 것이며, 실제 구현시에는 로딩 화면의 디자인, 레벨 로드 상태에 따른 UI 업데이트 등을 추가로 고려해야 합니다.
레벨 변경 기능은 게임의 전반적인 흐름을 관리하는 역할을 하므로, 일반적으로는 플레이어 클래스 보다는 게임 모드 클래스, 게임 상태 클래스, 또는 전용 관리자 클래스 등에 두는 것이 적합합니다.
게임 모드 클래스(GameMode): 게임의 전반적인 규칙을 설정하고, 게임이 어떻게 진행될지를 관리합니다. 게임 시작과 종료, 플레이어의 승리와 패배 등을 결정하며, 이러한 흐름을 제어하는 로직을 가집니다.
게임 상태 클래스(GameState): 게임의 현재 상태를 저장하고, 이를 클라이언트에 전달하는 역할을 합니다. 플레이어의 점수, 게임의 진행 시간 등 게임의 상태 정보를 관리합니다.
전용 관리자 클래스: 레벨 변경 기능만을 담당하는 전용 클래스를 만들 수도 있습니다. 이 클래스는 레벨 변경과 관련된 모든 로직을 캡슐화하고, 다른 클래스에서 이를 사용할 수 있도록 인터페이스를 제공합니다.
어떤 클래스에 레벨 변경 기능을 두느냐는 프로젝트의 구조와 요구 사항에 따라 결정하시면 됩니다. 이 기능이 게임의 흐름 제어와 밀접하게 관련되어 있다면 게임 모드나 게임 상태 클래스에 두는 것이 좋습니다. 반면, 이 기능이 독립적인 기능을 가지고 있다면 전용 관리자 클래스를 만드는 것이 적합할 수 있습니다.
'공부 > Unreal Engine 5' 카테고리의 다른 글
[언리얼5] 액션&축 매핑 향상된입력(Enhanced Input)으로 변경하기(feat. C++) (3) | 2024.01.12 |
---|---|
[언리얼5] 애니메이션 블루프린트 템플릿 (2) | 2024.01.08 |
[언리얼5] HUD 기능구현 메모 (0) | 2024.01.07 |
[언리얼5] 모션워핑(Motion Warping) (0) | 2023.12.30 |
[언리얼5] 애니메이션 블루프린트 Thread Safe Update (0) | 2023.12.19 |
댓글