RPC란?
RPC( Remote Procedure Call )는 네트워크 환경에서 한 시스템(클라이언트)이 다른 시스템(서버)에 함수를 실행해 달라고 요청하는 방식. 쉽게 말해서, "클라이언트가 서버의 함수를 직접 호출할 수 있도록 해주는 개념"이다.
언리얼 엔진에서 RPC의 역할
언리얼 엔진에서 RPC는 서버와 클라이언트 간 데이터 동기화 및 함수 호출을 위해 사용된다.
특히, 멀티플레이어 게임에서는 필수적인 기능이다!
RPC 유형 | 호출 방향 | 사용 예시 |
Client RPC | 서버 -> 클라이언트 | 서버에서 클라이언트의 UI 업데이트 요청 |
Sever RPC | 클라이언트 -> 서버 | 플레이어 입력을 서버로 전달 |
Multicast RPC | 서버 -> 모든 클라이언트 | 이펙트, 애니메이션 동기화 |
RPC 예시
보드게임 Bang을 아신다면 이해하실 수 있으실텐데요 Bang 카드 사용 시 데이터가 어떻게 흘러가는지 시퀀스 다이어그램으로 정리해봤습니다. 사실 UI는 있어야되는데 뺐습니다. 여기서 PlayerController가 UI, 즉 클라이언트 까지 같이한다고 보시면 됩니다.
위쪽의 부분만 간단하게 정리하자면
표 정리
단계 | RPC유형 | 호출 방향 | 설명 |
1. 공격 요청 | Sever RPC | PlayerController->GamMode | 클라이언트에서 서버로 공격 요청 전송 |
2. 피해자 정보 전달 | 일반 함수 호출 | GameMode->PlayerState | 서버에서 피해자 상태 확인 |
3. 회피여부 선택 요청 | Client RPC | PlayerController->UI | 서버에서 클라이언트 UI에 회피 선택 요청 |
4. 회피응답 전송 | Sever RPC | PlayerController->Sever | 클라이언트가 회피 여부를 선택해 서버에 전달 |
5. 체력 갱신 | Client RPC | PlayerState->PlayerController | 서버에서 클라이언트 UI에 체력 업데이트 요청 |
6.게임 종료 체크 | MultiCast RPC | GameMode -> 모든 클라이언트 | 게임 종료 여부를 모든 클라이언트에 알림 |
예시 코드
클라이언트에서 공격시작( PlayerController → Server )
UFUNCTION(Server, Reliable)
void Server_RequestAttack(APlayerState* TargetPlayer);
// 서버에서 공격 요청을 처리하는 함수
void AMyPlayerController::Server_RequestAttack_Implementation(APlayerState* TargetPlayer) {
// 공격 로직 수행 (사거리 내 대상 확인, 카드 사용 처리 등)
//PlayerState의 공격받는 로직 수행
}
피해자 회피 여부 결정( PlayerController->UI)
UFUNCTION(Client, Reliable)
void Client_ShowDodgeOption();
// 클라이언트에서 회피 선택 UI를 띄움
void AMyPlayerState::Client_ShowDodgeOption_Implementation() {
// 회피 카드 사용 여부 선택하는 UI 표시
ShowDodgeCardUI();
}
플레이어 사망 시 팀 체크 및 게임 종료 여부 확인( GameMode → GameState → PlayerController )
UFUNCTION(NetMulticast, Reliable)
void Multicast_AnnounceGameEnd(ETeam WinningTeam);
// 서버에서 게임 종료 체크 후 모든 클라이언트에게 결과 전달
void AMyGameMode::CheckGameEnd() {
if (IsGameOver()) {
Multicast_AnnounceGameEnd(WinningTeam);
}
}
void AMyGameMode::Multicast_AnnounceGameEnd_Implementation(ETeam WinningTeam) {
// UI에 승리 팀 표시
ShowWinningTeamUI(WinningTeam);
}
이렇게 볼 수 있다.
RPC를 이해하려면 게임 내의 데이터 패킷의 이동흐름을 잘 이해해야 그 다음에 이해할 수 있기 때문에 처음에 그냥 봐서는 이해가 안됐던것이다.
'언리얼 공부' 카테고리의 다른 글
남의 블루프린트 읽는공부 (0) | 2025.03.31 |
---|---|
멀티플레이 객체 생성 순서 & 동기화 흐름 (0) | 2025.03.21 |
언리얼의 네트워크 기본구조 (0) | 2025.03.18 |
2주간 WIL 정리 (0) | 2025.02.03 |
C++언리얼 하는방법(안돼서 헤맸음) (0) | 2025.01.20 |