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

seunghyun·2024년 5월 14일
0

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)

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

0개의 댓글

관련 채용 정보