언리얼 엔진의 멀티 플레이에서 네트워크 동기화를 위해 사용하는 대표적인 방법으로는 두 가지가 있다.
1. Property Replication
2. RPC(Remote Procedure Call)함수
두 방법은 모두 서버 / 클라이언트 간 데이터 및 이벤트 동기화를 목적으로 하지만 각각 다른 특징을 가지고 있다.
두 방법의 사용 방법과 특징에 대해 알아보자.
Property Replication은 UE5의 네트워크 동기화 시스템에서 가장 기본적인 방식으로,
특정 프로퍼티(변수)를 서버가 자동으로 클라이언트에게 동기화해 주는 기능이다.
자동이라는 말이 키워드로, RPC함수와 가장 다른 점이다.
Property Replicatoin을 사용하기 위해선 반드시 해야하는 두 가지가 있는데,
UPROPERTY(Replicated)
float Health;
값이 업데이트될 때마다 특정 함수를 호출하고 싶다면 ReplicatedUsing=OnRep_Health 와 같이 선언하고 OnRep_Health() 함수를 구현하면 해당 함수는 서버가 변수를 변경하여 클라이언트에 복제될 때마다 자동 호출된다.
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;
UFUNCTION()
OnRep_Health();
AActor 또는 UActorComponent를 상속받는 클래스에서 오버라이딩하여, 어떤 프로퍼티를 복제할지 설정할 수 있다.
void AMyCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty >& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AMyCharacter, Health);
}
Owner에게만 Replicate되게 하는 등 조건부로도 설정할 수 있다.
(출처 - https://dev.epicgames.com/documentation/en-us/unreal-engine/conditional-property-replication?application_version=4.27)
- 자동화된 동기화 - 변수만 Replicated로 선언하면 엔진이 알아서 클라이언트와 동기화를 처리해주므로 편리하다.
- 주기적 업데이트 - 언리얼 엔진은 내부적으로 네트워크 프레임마다 복제할 프로퍼티의 리스트를 확인하고, 변경된 값만 전송한다.
- 복제되는 프로퍼티가 많아질수록 네트워크 트래픽이 증가할 수 있다.
- 서버에서 값을 변경해야만 클라이언트에 반영된다.
RPC 함수는 서버와 클라이언트가 함수 호출을 통해 서로 이벤트나 로직을 실행시키는 방식을 말한다.
함수에 ‘Server’, ‘Client’, ‘NetMulticast’와 같은 Specifier를 붙여, 함수가 어디에서 실행되어야 하는지 지정해야 한다.
(출처 - https://dev.epicgames.com/documentation/en-us/unreal-engine/rpcs?application_version=4.27)
클라이언트에서 함수를 호출하면, 그 함수는 서버에서 실행된다.
EX) 무기 발사, 아이템 사용, 데미지 계산 등 ‘서버에서 권한을 가지고 처리해야 하는 로직’에서 사용.
서버에서 클라이언트 함수를 직접 호출하여, 해당 클라이언트 측에서만 특정 로직이 실행된다.
EX) UI 업데이트, 사운드 재생 등 해당 플레이어 클라이언트에 한정된 이벤트 전달.
서버에서 함수를 호출하면, 서버와 연결된 모든 클라이언트가 해당 함수를 실행한다.
EX) 이펙트, 월드 이벤트 등 모두에게 보여줘야 하는 이벤트.
UFUNCTION(Server, Reliable, WithValidation)
void ServerMYFunction();
구현부
ServerMYFunction_Implementation()
ServerMYFUnction_Validation()
이번 HAS프로젝트를 진행하면서 RPC함수를 썼던 경우는 다음과 같다.
이번 HAS Project를 진행하면서 언리얼 엔진의 멀티 플레이, 네트워크 로직에 대한 이해를 가지게 되었다.
역시 일단 부딪혀봐야 더 빨리 습득하는 것 같다.
※ HAS Project는 Listen Server 환경에서 제작해서 Dedicated Server 환경에서의 개념과 다를 수도 있다.
Property Replication
특정 변수를 서버에서 클라이언트에게 자동으로 동기화”하는 데 사용.
지속적, 주기적인 값 동기화에 유용.RPC함수
특정 시점에 이벤트/함수를 호출해 서버-클라이언트 간 로직을 실행”하는 데 사용.
이벤트성 로직이나 서버 권한이 필요한 행동에 적합.