728x90
레벨을 여는 방법은 간단하다.
UFUNCTION(BlueprintCallable, meta=(WorldContext="WorldContextObject", AdvancedDisplay = "2", DisplayName = "Open Level (by Name)"), Category="Game")
static ENGINE_API void OpenLevel(const UObject* WorldContextObject, FName LevelName, bool bAbsolute = true, FString Options = FString(TEXT("")));
UGameplayStatics 에 정의된 OpenLevel 함수를 사용하면 된다.
const UWorld* World = GetWorld();
check(World);
UGameplayStatics::OpenLevel(World, *LevelName);
요런식으로 쓸 수 있다.
하지만 레벨을 열 때, 특정 게임모드로 지정된 레벨을 열고 싶다면?
물론, 코드 없이 하는 간단한 방법도 있다.
Window - World Settings 에 들어가면 Window 관련 메뉴가 열린다.
게임모드 설정을 원하는 레벨에서
GameMode Override 를 원하는 BP 혹은 C++ 클래스로 설정하면 해당 레벨은 그 게임모드로 열리게 된다.
하지만 모두 C++ 로 하고 싶다 라면 아래 방법으로 가능하다.
FString Options = FString(TEXT("")
OpenLevel 함수의 마지막 인자를 보면 Options 가 있다.
이 Options 에 원하는 게임모드의 경로를 넣어주면 된다.
단, 앞에 ?game= 가 붙는다.
?game=/Script/MyProject.MyGameMode
예시로 이런 형식으로 넣어주면 된다.
조금 응용하자면 매번 경로를 알기 번거로우니,
클래스이름::StaticClass() 로 접근해서 옵션을 FString 으로 만들어 줄 수 있다.
void URPGameInstance::ChangeLevel(const FString& LevelName, const TSubclassOf<AGameModeBase> GameMode) const
{
const UWorld* World = GetWorld();
check(World);
if (GameMode)
{
const FString Option = FString::Printf(TEXT("?game=%s"), *GameMode->GetPathName());
UGameplayStatics::OpenLevel(World, *LevelName, true, *Option);
return;
}
UGameplayStatics::OpenLevel(World, *LevelName);
}
TSubClassOf<AGameModeBase> 의 형태로 게임모드의 StaticClass 를 넘겨주면 GetPathName() 을 통해
경로를 가져올 수 있다.
GameMode 매개변수에 default 값을 nullptr 로 주어, 매개변수를 넣어주면 게임모드를 set 하면서 로드하고,
매개변수가 없이 레벨 이름만 넘겨주면, 레벨만 열 수도 있다.
728x90
'언리얼5 & C++' 카테고리의 다른 글
[언리얼5] Data Table 로더 만들기 *4부* / 커스텀 에디터 버튼 생성하고 기능연결 (0) | 2024.06.13 |
---|---|
언리얼5 C++ | 서브 레벨 스트리밍, 맵 로드 하기 (1) | 2024.02.16 |
[언리얼5] Data Table 로더 만들기 *3부* (CSV) with Python / 에셋 생성하기 (1) | 2024.01.24 |
[언리얼5] Data Table 로더 만들기 *2부* (CSV) with Python / C++ 구조체 생성기 작성하기 (2) | 2024.01.24 |
[언리얼5] Data Table 로더 만들기 *1부* (CSV) with Python / 데이터 작성하기 (0) | 2024.01.24 |