공부중

[UE] Editor에서 SeamlessTravel이 안되는 문제. 본문

Programing/UnrealEngine

[UE] Editor에서 SeamlessTravel이 안되는 문제.

곤란 2025. 3. 9. 06:10
반응형

작업을 하다보면 역시 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

참고 포럼글

 

반응형