쌍방 호출 가능 (Client↔Server)
호출자(Client/Server) → 수신자(Server/Client)에게 함수를 원격 실행시키는 방식
(예) Server RPC, Client RPC, Multicast RPC
일방향(서버→클라)
Server → Client 로만 데이터가 복제됨
클라에서 값을 바꾸더라도 그대로 서버에 반영되지 않음
클라이언트가 값 변경을 원하면 → Server RPC를 호출해서 서버에 전달해야 함
그리고 그 값이 Replicated로 설정돼 있으면 → 다시 Server → Client 방향으로 전체 클라에 복제됨
로컬에서 호출되지만 (호출하는 머신과는) 다른 머신에서 원격 실행되는 함수
네트워크 연결을 통해 클라이언트와 서버 사이에 메시지를 전송
게임에 큰 영향을 끼치지 않는 일시적인 효과들에 사용
(예) 사운드 재생, 파티클 스폰, 액터의 핵심적인 기능과는 무관한 일시적 효과
→ 게임에 큰 영향을 끼치는 것들은 이후에 배울 프로퍼티 레플리케이션
UFUNCTION 선언에 Server, Client, NetMulticast 키워드를 붙여주기
UFUNCTION( Client )
void ClientRPCFunction();
UFUNCTION( Server )
void ServerRPCFunction();
UFUNCTION( NetMulticast )
void MulticastRPCFunction();
Actor 에서 호출되어야 함
Actor 는 반드시 replicated여야 함
서버 (호출) → 클라이언트 (실행) RPC의 경우, 해당 Actor 를 실제 소유하고 있는 클라이언트에서만 함수가 실행
클라이언트 (호출) → 서버 (실행) RPC의 경우, 클라이언트는 RPC가 호출되는 Actor 를 소유해야 함
Multicast RPC는 예외:
서버에서 호출되는 경우,
→ 서버에서 로컬로 실행 + 현재 접속 중인 모든 클라이언트에서도 실행
클라이언트에서 호출되는 경우,
→ 로컬에서만 실행됨, 서버에는 실행되지 않음
멀티캐스트 이벤트 전송 제한(Throttle)
Run 호출하는 곳 Invoke 실행하는 곳

서버에서 실행되는 RPC 보안용 키워드
작성 시 함수가 _Implementation() + _Validate() 두 개로 나뉨
_Validate() → 실행 여부 판단 (위변조 방어막)
_Implementation() → 실제 실행 로직
_Validate() 가 false 반환하면 → 밴 처리 가능
기본값은 Unreliable (안 쓰면 자동으로 이거)
원하는 속성만을 다른 클라이언트에게 복제하는 것
액터의 모든 속성의 변경된 값을 모든 클라이언트에게 복제하는 것은 비효율적
bReplicates = true;
→ 이 액터 자체가 네트워크로 복제 가능해짐
UPROPERTY(Replicated)
int32 Health;
→ 속성을 Replicated로 표시해야 동기화 가능
void AMyActor::GetLifetimeReplicatedProps(TArray< FLifetimeProperty >& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AMyActor, Health);
}
→ 어떤 속성을 복제할지 등록해야 함 (DOREPLIFETIME 매크로 사용)
| 구분 | RPC | Property Replication |
|---|---|---|
| 방식 | 함수 호출 | 변수(데이터) 복제 |
| 흐름 | 양방향 (Client→Server / Server→Client / Multicast) | 일방향 (Server→Client) |
| 실행 시점 | 호출 순간 즉시 실행 | 서버 값이 바뀔 때 자동으로 클라에 반영 |
| 용도 | 행동, 이벤트 트리거 (총 쏘기, 점프, 공격 등) | 상태 동기화 (체력, 위치, 아이템 개수 등) |
| 설정법 | UFUNCTION(Server/Client/Reliable/Unreliable) | UPROPERTY(Replicated) + DOREPLIFETIME |
| 보안 | Server RPC는 _Validate()로 위변조 방지 가능 | 데이터는 서버 권한만 반영 → 신뢰성 확보 |
여울님의 글은 언제나 힘이 있네요
Replication과 RPC에 대한 간결한 흐름이 핵심을 관통했습니다.