[UE5 Multiplay] SeamlessTravel 시 PlayerState 정보를 유지하기

seunghyun·2024년 5월 14일
1

ProjectGO

목록 보기
6/7

문제

Lobby 레벨에서 캐릭터 직업 4가지 중 하나를 선택하면, Battle 레벨로 ServerTravel 을 하고자 한다.

이런 경우, 일반 Server Travel 을 사용하면 PlayerState가 초기화된다.

근데 Seamless Travel 을 사용하면, PlayerState와 같은 플레이어 관련 데이터가 유지되므로, 레벨 전환 후에도 플레이어의 상태를 유지할 수 있다고 한다. 이 방법을 사용하여 캐릭터를 Lobby 레벨에서 Battle 레벨로 넘겨보고자 하는 중이다.

  • PostSeamlassTravel()
    virtual void PostSeamlessTravel() override;
  • PIE (Play In Editor) 모드에서 Seamless Travel을 사용하려면, net.AllowPIESeamlessTravel=True을 설정해준다.
    LogGameMode: Warning: ProcessServerTravel: Seamless travel is disabled in PIE, set net.AllowPIESeamlessTravel=1 to enable.
    [/Script/Engine.NetworkSettings]
    net.AllowPIESeamlessTravel=True

근데... SeamlessTravel에서도 PlayerState가 초기화된다.


해결

CopyProperties 메서드를 활용하여 PlayerState의 데이터를 심리스 트래블 중에 복사할 수 있다고 한다. 아래 함수를 재정의 해주자!

virtual void CopyProperties(class APlayerState* PlayerState) override;

void AGOPlayerState::CopyProperties(APlayerState* PlayerState)
{
	Super::CopyProperties(PlayerState);

	AGOPlayerState* MyPlayerState = Cast<AGOPlayerState>(PlayerState);
	if (MyPlayerState)
	{
		MyPlayerState->SelectedCharacterClass = SelectedCharacterClass;
	}
}

참고한 답변은 아래 포럼의 답변이다.

아래 포스트도 읽으면 좋을 것 같다!! 킵해두기- 별별


결과 화면 (GIF)

아직 보이지 않는다면 로딩 중이니 잠시만 기다려주세요!!

profile
game client programmer

3개의 댓글

comment-user-thumbnail
2025년 4월 8일

와 여기는 성지가 될 것입니다.
이틀동안 머리 터질 것 같았는데 감사합니다

1개의 답글
comment-user-thumbnail
2025년 5월 1일

와....진짜...진짜...압도적 감사드려요.... 도대체 왜 안되지 뭐가 문제지 난 코딩도 못하고 말도 제대로 못하는 그냥 감자덩어리야 하면서 울다가 이 글 발견했는데 너무 감사드립니다...
복받으세요 감사합니다!

답글 달기