게임 개발 공부/네트워크
Multiplayer Framework Replication과 RPC
Vetenir
2025. 3. 25. 21:26
해당 사진은 Dedicated Server 기준
클래스 | 존재 위치 | 역할 |
GameMode | Server | 게임 규칙 제어 |
GameState | Server와 모든 Client | 게임의 전체적인 정보(e.g. 점수, 시간) 동기화 |
PlayerController | Server와 자신을 소유한 Client | 각 플레이어의 입력은 자기 Client와 Server에만 알 수 있음 |
Pawn | Server와 모든 Client | 모든 플레이어가 자신 외의 Pawn도 볼 수 있도록 Server에서 Replicate |
서버만 모든 Player State를 가지면 안 될까?
만약 서버만 모든 Player State를 관리한다면...
- 다른 플레이어의 정보 (개인 점수, 체력 등의 정보)를 매번 서버에 요청해야함.
- 네트워크 부하가 커지고 응답 속도가 느려질 수 있음.
결국에는 다른 플레이어의 Player State도 가지고 있는 것이 효율적.
Replication과 RPC
Replication
- Replication은 Server에서 Client로 객체 상태를 자동 동기화해주는 기능.
- 계속 변할 수 있는 상태를 동기화하는데 적합.
- Replication은 단방향입니다. Server -> Client
Replication 사용 방법
Property나 Actor를 Replicates = true로 설정하면,
Engine의 네트워킹 시스템이 주기적으로 해당 데이터를 관련된 Client들에게 보냄.
RPC (Remote Procedure Call)
- RPC (Remote Procedure Call) 는 원격 머신에서 함수를 호출하는 명시적인 방법.
- 특정 순간에 실행되는 동작/Event를 원격으로 호출하는 것.
RPC 종류 | 호출 방향 | 실행위치 | 주요 용도 |
Server RPC | Client → Server | Server | 문 열기, 아이템 습득 등 유저 요청 전달 |
Client RPC | Server → Client | 특정 Client(Actor Owner) | UI 업데이트, 알림 등 개인화된 피드백 전달 |
Multicast RPC | Server → 모든 Client | 모든 Client 및 Server(Optional) | 시각효과, 소리 등 동시 multicast |
RPC 사용 방법
UFUNCTION에 Server, Client, NetMulticast 같은 지정자를 붙여 만들며,
이를 호출하면 설정된 대상(Server 또는 Client들)에서 함수가 실행.
정리
✔ Replication = 값 동기화
✔ RPC = 원격 함수 호출
사용 예시
Client가 Server RPC로 “이 문을 열고 싶어요”라고 알린다. (Event 전달)
→ Server는 문을 여는 권한이 있으니 문의 State에 대한 Property를 Open으로 변경.
→ 그 Property를 Replication하여 모든 Client에게 알린다.
→ 문이 열린다.
주의
- Client는 Server의 Replicated Variable을 직접 바꿀 수 없다.
- Client가 Local 환경에서 Replicated Varialbe의 값을 바꿔도 자기 화면에만 일시적으로 바뀔 뿐, Server나 다른 Client에 반영되지 않는다.