본캠프 80일차_언리얼엔진 게임개발 입문_Property Replication

YU YEON WON·2025년 12월 3일

멀티플레이어 게임 제작시 변수들을 클라이언트와 동기화 하기 위한 시스템 중 'Property Replication'에 대해 복습하였다.


Property Replication

1. 개념

  • Replication의 핵심: 서버가 모든 게임 상태를 관리하고, 클라이언트는 서버가 보낸 데이터를 반영
  • 자동 동기화: UPROPERTY(Replicated)로 선언된 변수는 서버 값이 바뀔 때 클라이언트에 자동으로 전달
  • 클라이언트 제한: 클라이언트는 Replicated 변수 값을 직접 수정하지 않고, 서버를 통해서만 변경할 수 있음

2. 구현 방법

  • UPROPERTY 매크로 사용
UPROPERTY(Replicated)
int32 Health;
//→ 서버에서 Health 값이 변경되면 클라이언트에 자동 반영
  • GetLifetimeReplicatedProps 함수
void AMyActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
    Super::GetLifetimeReplicatedProps(OutLifetimeProps);
    DOREPLIFETIME(AMyActor, Health);
}
//→ 어떤 프로퍼티를 복제할지 지정하는 핵심 함수
  • 조건부 Replication

  • COND_OwnerOnly, COND_SkipOwner 같은 조건을 통해 특정 클라이언트에게만 값 전달 가능

  • 예: 플레이어 본인에게만 체력 UI 업데이트

3. 동작 특성

  • 신뢰성 : 클라이언트 값은 결국 서버 값과 일치하지만, 중간 변경 사항은 건너뛸 수 있음(예 : Health가 100→200→300으로 빠르게 변하면 클라이언트는 최종값 300만 받을 수 있음)
  • 네트워크 최적화 : 모든 변수를 복제하면 부하가 커지므로, 꼭 필요한 값만 Replication 설정해야 함

4. 고급 활용- RepNotify (OnRep 함수)

UPROPERTY(ReplicatedUsing=OnRep_Health)
int32 Health;

UFUNCTION()
void OnRep_Health()
{
    UpdateHealthUI();
}
//→ 값이 클라이언트에 업데이트될 때 특정 로직 실행 가능.
  • Blueprint 지원
  • 블루프린트에서도 Replicated 옵션을 켜고, OnRep 이벤트를 활용해 UI나 애니메이션을 동기화할 수 있음

5. 주의사항

  • 빈번한 값 변경: 빠르게 변하는 값은 RPC(Remote Procedure Call)로 처리하는 것이 효율적
  • 보안 : 클라이언트가 값을 직접 수정하지 못하도록 반드시 서버 권위 구조를 유지해야 함
  • 테스트 : 멀티플레이 환경에서 반드시 서버-클라이언트 동작을 확인해야 함

📝 정리: 언리얼 엔진에서 Property Replication은 멀티플레이 게임의 핵심 동기화 메커니즘, UPROPERTY(Replicated)와 GetLifetimeReplicatedProps, 그리고 OnRep 함수를 적절히 활용하면 서버 권위 구조를 유지하면서도 클라이언트에 일관된 게임 경험을 제공할 수 있음

profile
🕹️🎮🍱✈️📸 안녕하세요! 게임개발에 도전하고 있습니다!

0개의 댓글