내배캠 TIL

[ 내배캠 TIL 260325] Unreal Engine 네트워크 복제 시스템 정리

xodn246 2026. 3. 25. 19:49

1. 액터 복제 설정 (bReplicates)

  • 역할
    해당 액터를 네트워크 복제 대상으로 포함할지 결정
  • 설정 위치
    생성자에서 설정
bReplicates = true;
  • 핵심 포인트
    • 서버에서 생성된 액터가 클라이언트에도 자동으로 생성됨
    • 이 설정이 없으면 복제 자체가 시작되지 않음

 


2. 변수 복제 등록 (GetLifetimeReplicatedProps)

  • 역할
    액터 내부 변수 중 어떤 것을 복제할지 선택
  • 구현 방법
#include "Net/UnrealNetwork.h"

void AMyActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
    Super::GetLifetimeReplicatedProps(OutLifetimeProps);

    DOREPLIFETIME(AMyActor, Health);
}
  • 핵심 포인트
    • 복제할 변수는 반드시 여기 등록해야 함
    • 선언만 하고 구현 안 하면 링커 에러(LNK2001) 발생
    • 헤더 포함 필수

 


3. OnRep 함수 (ReplicatedUsing)

  • 역할
    복제된 값이 클라이언트에 도착했을 때 실행되는 콜백 함수
  • 설정 방법
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;

UFUNCTION()
void OnRep_Health();
  • 구현 예시
void AMyActor::OnRep_Health()
{
    // 체력 변경 시 실행할 로직 (UI 갱신 등)
}
  • 핵심 포인트
    • 값이 변경될 때만 실행 (Tick 필요 없음)
    • 기본적으로 클라이언트에서만 자동 호출
    • 서버에서는 필요 시 수동 호출
    • 이전 값 비교도 가능 (OldValue 활용)

 


C++ OnRep vs Blueprint RepNotify

공통 개념 (Replication Notify)

  • 변수 값이 변경되어 클라이언트에 복제되는 순간 자동으로 호출되는 콜백 함수
  • 값 변경을 감지해서 후처리를 수행하는 이벤트 기반 시스템

 


C++ : OnRep_

UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;
  • 특징
    • 함수 이름은 보통 OnRep_변수명 규칙 사용
    • C++에서 직접 구현
    • 필요 시 OldValue를 받아 이전 값 비교 가능
    • 서버에서는 자동 호출되지 않음 (직접 호출 필요)

 


Blueprint : RepNotify

  • 설정 방식
    • 변수 옵션에서 RepNotify 체크
    • 자동으로 Notify 함수 생성됨
  • 특징
    • 블루프린트에서 이벤트처럼 사용
    • 별도 함수 선언 없이 쉽게 연결 가능
    • 내부적으로는 C++의 OnRep과 동일한 동작

 


핵심 차이

  • C++ → 직접 함수 구현 (유연성 높음)
  • Blueprint → 자동 이벤트 생성 (사용 편의성 높음)

 


한줄 정리

→ "OnRep과 RepNotify는 동일한 개념이며, C++은 직접 구현, 블루프린트는 자동 이벤트 형태로 제공된다."

 


전체 흐름 정리

bReplicates = true
→ 액터 자체를 네트워크에 등장시킴

DOREPLIFETIME
→ 복제할 변수 선택

OnRep_ / RepNotify
→ 값 변경 시 클라이언트에서 후처리

 


비유로 이해하기

  • bReplicates → 공연장 입장권
  • GetLifetimeReplicatedProps → 반입 물품 목록
  • ReplicatedUsing / RepNotify → 알림 벨
  • OnRep 함수 → 벨 울리면 하는 행동