본문 바로가기

멀티플레이 공부

멀티플레이 공부(Property Replication)

레플리케이션(Replication)

생성된 액터의 정보를 네트워크 내 다른 클라이언트에게 복제하는 작업을 레플리케이션이라고 합니다.

서버-클라이언트 모델에서는 서버에서 클라이언트로 복제되는 것이 기본 규칙입니다.

 

레플리케이션 방법은 RPC와 Property Replication이 있다.

Property Replication

액터의 모든 속성의 변경된 값을 모든 클라이언트에게 복제하는 것은 비효율적이다. 원하는 속성만을 다른 클라이언트에게 복제하는 것을 프로퍼티 레플리케이션이라고 한다.

프로퍼티 레플리케이션은 항상 Authority에서 Proxy로만 가능하다.(서버에서 복제된 클라이언트에게만 가능)

설정 방법

1. 액터의 bReplicates 속성을 true로 한다.

  • bReplicates = true

2. 네트워크로 복제할 액터의 속성을 키워드로 지정한다.

  • UPROPERTY(Replicated)

3. GetLifetimeReplicatedProps() 함수에 네트워크로 복제할 속성을 추가한다.

  • #include "Net/UnrealNetWork.h" 헤더파일을 추가한다.
  • DOREPLIFETIME 매크로를 사용해서 복제할 속성을 명시한다.
// .h
	UPROPERTY(Replicated)
	FString PlayerNameString;
    
// .cpp

ACXPlayerState::ACXPlayerState()
	: PlayerNameString(TEXT("None"))
{
	bReplicates = true;
}

void ACXPlayerState::GetLifetimeReplicatedProps(TArray<class FLifetimeProperty>& OutLifetimeProps) const
{
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	DOREPLIFETIME(ThisClass, PlayerNameString);
}

 

GameState, PlayerState, PlayerController, Character, Pawn 은 bReplicates의 기본 값이 true라고 한다.