오늘은 언리얼의 RPC와 Replication에 대해서 알아보았다.

 

 

RPC란?

 

RPC는 서버와 클라이언트 간에 특정 함수를 실행하는 방식이다. 호출하는 PC와 실행되는 PC가 따로 있는 것이다.

RPC의 주요 종류에는 Client -> Server, Server -> Client, Multicast가 있다.

 

1. Client -> Server

  • 클라이언트에서 함수를 호출하면 서버에서 실행한다.
  • ex) 플레이어가 총을 쏠 때 서버에서 검증

2. Server -> Client

  • 서버에서 클라이언트로 특정 함수를 실행하도록 요청한다.
  • ex) 특정 이펙트 이벤트 발생 시 사용

3. Multicast

  • 서버에서 모든 클라이언트에게 실행 명령을 보낸다.
  • ex) 모든 플레이어에게 특정 애니메이션 또는 효과 동기화

 

위의 Client, Server, NetMulticast는 UFUNCTION() 매크로와 함께 사용되는 키워드이다.

 

UFUNCTION(Client) -> 클라이언트에서 해당 RPC를 실행하라

UFUNCTION(Server) -> 서버에서 해당 RPC를 실행하라

UFUNCTION(NetMulticast) -> 서버를 포함한 모든 클라이언트에서 해당 RPC를 실행하라

 

Client, Server, NetMulticast와 같이 UFUNCTION() 매크로와 함께 사용 되는 키워드에는 WithValidation, Unreliable, Reliable이 있다.

 

1. WithValidation

  • 서버 실행 RPC 경우에 사용되는 키워드
  • 키워드가 붙은 RPC는 _Implementation() 함수와 _Validate() 함수로 나뉜다.
  • _Validate 함수는 해당 RPC가 실제로 실행될지 말지 결정한다.
  • 해킹 등의 비정상적인 호출을 방지하기 위해 사용한다.

2. Unreliable

  • UDP 통신을 이용한다.
  • 속도가 빠르지만 무조건 실행될 것이란 보장이 없다.
  • 이펙트, 사운드 같이 게임에 큰 영향 없는 로직에 사용한다.

3. Reliable

  • TCP 통신을 이용한다.
  • 속도가 느리지만 무조건 실행된다.
  • 충돌, 데미지 ,스폰과 같이 게임에 큰 영향을 끼치는 로직에 사용한다.

 

 

Replication이란?

 

Replication이란 생성된 객체 또는 변수의 값을 서버와 클라이언트 간에 동기화 하는 기능이다.

 

1. 변수 (Properties)

  • UPROPERTY(Replicated) 를 사용하여 변수 동기화 가능하다.

2. 액터 (Actors)

  • bReplicates = true; 로 설정하면 서버가 해당 액터를 모든 클라이언트와 동기화한다.

 

리플리케이트 변수 선언

UPROPERTY(Replicated)
int32 Health;

 

 

리플리케이트 활성화

void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
    Super::GetLifetimeReplicatedProps(OutLifetimeProps);
    DOREPLIFETIME(AMyCharacter, Health); // Health 변수 동기화
}

 

RepNotify (변경될 때 실행되는 함수)

UPROPERTY(ReplicatedUsing=OnRep_Health)
int32 Health;

UFUNCTION()
void OnRep_Health();
void AMyCharacter::OnRep_Health()
{
    // 클라이언트에서 실행됨 (UI 업데이트 등)
}

 

 

RPC, Replication 비교

  RPC Replication
주요 목적 함수 실행 요청 데이터 동기화
방향 특정 클라이언트 / 서버로 호출 서버 -> 클라이언트
주요 사용 사례 공격, 점프, 상호작용 체력, 위치, 상태 값 유지
적용 대상 함수 변수 및 액터
실행 방식 직접 호출 자동 동기화

+ Recent posts