관리 메뉴

기억을 위한 기록들

[UE] 언리얼엔진 RPC와 Replication 에 관하여 본문

UnrealEngine

[UE] 언리얼엔진 RPC와 Replication 에 관하여

에드윈H 2025. 9. 26. 14:45

1. 들어가며

언리얼 엔진에서 멀티플레이 게임을 개발하려면 RPC(Remote Procedure Call)와 Replication의 정확한 이해가 필수적이다.

 

언리얼은 서버-클라이언트 구조를 기반으로 하고 있으며, 단순히 UFUNCTION()을 호출한다고 해서 클라이언트와 서버가 같은 결과를 얻는 것은 아닙니다. 이 글에서는 RPC의 종류, Replication의 원리, 그리고 클래스별 네트워크 특성을 정리해보려고한다.

 

참고 자료 : 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/remote-procedure-calls-in-unreal-engine

 

 

 

 

 

2. 왜 중요한가?

멀티플레이 게임에서 가장 큰 문제는 데이터 불일치입니다.

  • 클라이언트에서만 처리하면 → 치트 가능성 (예: 무한 체력, 순간 이동)
  • 서버에서만 처리하면 → 응답 지연(레이턴시) 때문에 플레이어 경험이 나빠짐

이를 해결하기 위해 언리얼은 서버 권한(authority) 구조 + RPC 호출 방식 + Replication 동기화를 제공합니다.
즉, 어떤 로직은 서버에서, 어떤 로직은 클라이언트에서 실행해야 하는지를 정확히 구분할 수 있어야 안정적인 멀티플레이 게임을 만들 수 있습니다.

 

 

3. RPC 종류 정리

예시)

UFUNCTION(Server, Reliable) // 클라이언트에서 호출하면 서버에서 실행
void Server_DoAction(); 

UFUNCTION(Client, Reliable) // 서버에서 호출하면 특정 클라이언트에서 실행
void Client_NotifyAction();

UFUNCTION(NetMulticast, Unreliable) //서버에서 호출하면 모든 클라이언트에서 실행
void Multicast_PlayEffect();
  • Server RPC
    • 클라이언트 → 서버로 호출
    • 서버 권한이 필요한 로직 (탄환 스폰, 데미지 판정 등)에서 사용
  • Client RPC
    • 서버 → 특정 클라이언트로 호출
    • UI 업데이트, 개인 알림 등 개별 처리에 적합
  • NetMulticast RPC
    • 서버 → 모든 클라이언트로 호출
    • 이펙트, 사운드 재생 같은 전역적 이벤트에 활용

4. Replication과 클래스별 네트워크 특성

 

  • GameMode: 서버 전용, 클라이언트에는 존재하지 않음 → RPC 불가능
  • GameState: 서버에서 관리 + 클라에 자동 복제 → 전역 상태 공유
  • PlayerState: 각 플레이어 고유 상태, 클라에 복제 → 점수, 닉네임, Ping 등
  • Actor / Component: 일반 객체, bReplicates = true 설정 시 네트워크 동기화 가능

5. 실제 예시: 총알 발사 로직

총알 발사 동작을 구현한다고 가정해봅시다.

  1. 클라이언트 입력
void AMyCharacter::Input_Fire() {
    if (HasAuthority()) 
    {
        // 서버라면 바로 실행
        HandleFire();
    } else {
        // 클라이언트라면 서버 RPC 요청
        Server_Fire();
    }
}

2. 서버에서 탄환 스폰

 
UFUNCTION(Server, Reliable)
void Server_Fire() {
    HandleFire(); // 탄환 생성 및 데미지 판정
}

3. 모든 클라이언트에 이펙트 전파

UFUNCTION(NetMulticast, Unreliable)
void Multicast_PlayMuzzleFlash() {
    UGameplayStatics::SpawnEmitterAttached(MuzzleFlash, WeaponMesh);
}

이렇게 하면:

  • 클라이언트는 서버에게 발사를 요청하고,
  • 서버는 탄환을 생성하며,
  • 모든 클라이언트는 같은 이펙트를 보게 됩니다.

 

6. 마무리

RPC와 Replication은 언리얼 엔진의 멀티플레이 아키텍처 핵심 언어입니다.

  • Server / Client / Multicast RPC를 정확히 구분할 수 있어야 하고,
  • GameMode / GameState / PlayerState 같은 클래스별 네트워크 특성을 이해해야 합니다.
  • 실무에서는 단순 호출이 아니라 보안(치트 방지), 성능(최소 패킷 전송), **플레이 경험(레이턴시 보정)**까지 고려해야 합니다.