공부중
[UE] Editor에서 SeamlessTravel이 안되는 문제. 본문
작업을 하다보면 역시 Editor에서 작업을 많이 하게 되는데 여기서 SeamlessTravel이 동작을 안하는 문제가 발생했다.
ATestGameModeBase::ATestGameModeBase(const FObjectInitializer& ObjectInitializer) :
Super(ObjectInitializer)
{
// ....
bUseSeamlessTravel = true;
}
GameMode에 있는 bUseSeamlessTravel을 true로 해놓아도 에디터에서 동작하지 않는 문제가 발생했다.
GPT와 열심히 씨름하다가 답을 못내놓는걸 보고 답답해서 결국 내부 코드를 한번 봤다.
void AGameModeBase::ProcessServerTravel(const FString& URL, bool bAbsolute)
{
#if WITH_SERVER_CODE
// 생략...
// Use game mode setting but default to full load screen if the server has been up for a long time so that TimeSeconds doesn't overflow and break everything
bool bSeamless = (bUseSeamlessTravel && GetWorld()->TimeSeconds < 172800.0f); // 172800 seconds == 48 hours
// 생략...
}
#endif // WITH_SERVER_CODE
}
UWorld::ServerTravel의 내부에 GameMode->ProcessServerTravel을 호출해주는데 여기 내부를 보면 먼저 GameMode에 있는 bUseSeamlessTravel을 조건으로 본다(뒤에 시간도 보지만..) 일단 여기까지는 문제없이 bSeamless가 true로 돌아간다.
void AGameModeBase::ProcessServerTravel(const FString& URL, bool bAbsolute)
{
#if WITH_SERVER_CODE
// 생략...
bool bSeamless = (bUseSeamlessTravel && GetWorld()->TimeSeconds < 172800.0f); // 172800 seconds == 48 hours
// 생략...
// There are some issues with seamless travel in PIE, so fall back to hard travel unless it is supported
if (World->WorldType == EWorldType::PIE && bSeamless && !FParse::Param(FCommandLine::Get(), TEXT("MultiprocessOSS")))
{
if (!UE::GameModeBase::Private::bAllowPIESeamlessTravel)
{
UE_LOG(LogGameMode, Warning, TEXT("ProcessServerTravel: Seamless travel is disabled in PIE, set net.AllowPIESeamlessTravel=1 to enable."));
bSeamless = false;
}
}
// 생략...
if (bSeamless)
{
World->SeamlessTravel(World->NextURL, bAbsolute);
World->NextURL = TEXT("");
}
else
{
// Switch immediately if not networking.
if (NetMode != NM_DedicatedServer && NetMode != NM_ListenServer)
{
World->NextSwitchCountdown = 0.0f;
}
GEngine->IncrementGlobalNetTravelCount();
GEngine->SaveConfig();
}
#endif // WITH_SERVER_CODE
}
위에서 bSeamless가 ture였지만 중간에 PIE에는 문제가 있다는 주석이 있다.. 무슨 문제인지는 모르겠지만
일단 동작하도록 하려면 아래 로그를 보자.
"ProcessServerTravel: Seamless travel is disabled in PIE, set net.AllowPIESeamlessTravel=1 to enable."
ProcessServerTravel: PIE에서 원활한 이동이 비활성화되어 있으므로 net.AllowPIESeamlessTravel=1을 설정하여 활성화합니다.
그렇다고한다 ...
저 if문 조건에 빠져서 bSeamless가 false가 되었고 아래 if (bSeamless)에 들어가지 못한것이다.
주석에 나온대로 설정을 하자면 DefaultEngin.ini파일에서 아래와같이 추가해주면된다.
[SystemSettings]
net.AllowPIESeamlessTravel=1
DefaultEngine.ini을 수정하고 싶지 않은경우에는 console에 명령어를 치면 된다.

net.AllowPIESeamlessTravel true
적절히 필요할때마다 콘솔 명령어를 치면 된다.
https://forums.unrealengine.com/t/seamless-travel-with-play-in-editor/394250/20
Seamless Travel with Play in Editor
In UE5, you can set “net.AllowPIESeamlessTravel true” in the console to enable seamless travel in PIE.
forums.unrealengine.com
참고 포럼글
'Programing > UnrealEngine' 카테고리의 다른 글
[UE] WAV파일을 DownSampling, Stereo To Mono로 변경 해보자. (0) | 2024.07.29 |
---|---|
[UE] 마이크로 전달한 음성 데이터를 wav파일로 저장해보자. - 3 (0) | 2024.07.16 |
[UE] 마이크로 전달한 음성 데이터를 wav파일로 저장해보자. - 2 (3) | 2024.07.16 |
[UE] 마이크로 전달한 음성 데이터를 wav파일로 저장해보자. - 1 (0) | 2024.07.15 |
[UE] 엔진 코드 빌드에러, Generate Header [x86-64] NearestNeighborOptimizedNetwork.ispc > fopen: No such file or directory (0) | 2024.05.14 |