게임 개발 공부/네트워크

Multiplayer Framework Replication과 RPC

Vetenir 2025. 3. 25. 21:26

https://www.reddit.com/r/UnrealEngine5/comments/1aiisow/i_tried_making_an_infographic_to_help_my/?rdt=58621

 

해당 사진은 Dedicated Server 기준

클래스 존재 위치 역할
GameMode Server 게임 규칙 제어
GameState Server와 모든 Client 게임의 전체적인 정보(e.g. 점수, 시간) 동기화
PlayerController Server와 자신을 소유한 Client 각 플레이어의 입력은 자기 Client와 Server에만 알 수 있음
Pawn Server와 모든 Client 모든 플레이어가 자신 외의 Pawn도 볼 수 있도록 Server에서 Replicate

 

 

서버만 모든 Player State를 가지면 안 될까?

만약 서버만 모든 Player State를 관리한다면...

  1. 다른 플레이어의 정보 (개인 점수, 체력 등의 정보)를 매번 서버에 요청해야함.
  2. 네트워크 부하가 커지고 응답 속도가 느려질 수 있음.

결국에는 다른 플레이어의 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에 반영되지 않는다.