오늘은 언리얼의 RPC와 Replication에 대해서 알아보았다.
RPC란?
RPC는 서버와 클라이언트 간에 특정 함수를 실행하는 방식이다. 호출하는 PC와 실행되는 PC가 따로 있는 것이다.
RPC의 주요 종류에는 Client -> Server, Server -> Client, Multicast가 있다.
1. Client -> Server
- 클라이언트에서 함수를 호출하면 서버에서 실행한다.
- ex) 플레이어가 총을 쏠 때 서버에서 검증
2. Server -> Client
- 서버에서 클라이언트로 특정 함수를 실행하도록 요청한다.
- ex) 특정 이펙트 이벤트 발생 시 사용
3. Multicast
- 서버에서 모든 클라이언트에게 실행 명령을 보낸다.
- ex) 모든 플레이어에게 특정 애니메이션 또는 효과 동기화
위의 Client, Server, NetMulticast는 UFUNCTION() 매크로와 함께 사용되는 키워드이다.
UFUNCTION(Client) -> 클라이언트에서 해당 RPC를 실행하라
UFUNCTION(Server) -> 서버에서 해당 RPC를 실행하라
UFUNCTION(NetMulticast) -> 서버를 포함한 모든 클라이언트에서 해당 RPC를 실행하라
Client, Server, NetMulticast와 같이 UFUNCTION() 매크로와 함께 사용 되는 키워드에는 WithValidation, Unreliable, Reliable이 있다.
1. WithValidation
- 서버 실행 RPC 경우에 사용되는 키워드
- 키워드가 붙은 RPC는 _Implementation() 함수와 _Validate() 함수로 나뉜다.
- _Validate 함수는 해당 RPC가 실제로 실행될지 말지 결정한다.
- 해킹 등의 비정상적인 호출을 방지하기 위해 사용한다.
2. Unreliable
- UDP 통신을 이용한다.
- 속도가 빠르지만 무조건 실행될 것이란 보장이 없다.
- 이펙트, 사운드 같이 게임에 큰 영향 없는 로직에 사용한다.
3. Reliable
- TCP 통신을 이용한다.
- 속도가 느리지만 무조건 실행된다.
- 충돌, 데미지 ,스폰과 같이 게임에 큰 영향을 끼치는 로직에 사용한다.
Replication이란?
Replication이란 생성된 객체 또는 변수의 값을 서버와 클라이언트 간에 동기화 하는 기능이다.
1. 변수 (Properties)
- UPROPERTY(Replicated) 를 사용하여 변수 동기화 가능하다.
2. 액터 (Actors)
- bReplicates = true; 로 설정하면 서버가 해당 액터를 모든 클라이언트와 동기화한다.
리플리케이트 변수 선언
UPROPERTY(Replicated)
int32 Health;
리플리케이트 활성화
void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AMyCharacter, Health); // Health 변수 동기화
}
RepNotify (변경될 때 실행되는 함수)
UPROPERTY(ReplicatedUsing=OnRep_Health)
int32 Health;
UFUNCTION()
void OnRep_Health();
void AMyCharacter::OnRep_Health()
{
// 클라이언트에서 실행됨 (UI 업데이트 등)
}
RPC, Replication 비교
| RPC | Replication | |
| 주요 목적 | 함수 실행 요청 | 데이터 동기화 |
| 방향 | 특정 클라이언트 / 서버로 호출 | 서버 -> 클라이언트 |
| 주요 사용 사례 | 공격, 점프, 상호작용 | 체력, 위치, 상태 값 유지 |
| 적용 대상 | 함수 | 변수 및 액터 |
| 실행 방식 | 직접 호출 | 자동 동기화 |

























