티스토리 뷰
🟩 학습 목표
- Property Replication의 가장 핵심적인 작동 원리를 이해한다.
- RPC와 Property Replication 지식을 결합하여 채팅 야구 게임의 로직을 구현한다.
🟧 레플리케이션(Replication)의 기초
레플리케이션은 서버에 생성된 액터의 정보를 네트워크 내의 다른 클라이언트들에게 복제하는 모든 과정을 의미한다. 언리얼 엔진의 서버-클라이언트 모델에서 레플리케이션은 기본적으로 서버에서 클라이언트로 흐르는 단방향성을 가진다.
🟦 복제의 두 가지 방법
- RPC(Remote Procedure Call): 함수 호출 자체를 복제하여 실행한다.
- Property Replication: 액터가 가진 특정 변수(속성)의 값이 변경되었을 때 이를 복제한다.
🟧 Property Replication의 이해
액터가 가진 수많은 속성을 매번 모두 복제하는 것은 네트워크 대역폭 낭비이므로 매우 비효율적이다. 따라서 개발자가 원하는 특정 속성만을 선택하여 복제하는 것이 프로퍼티 레플리케이션의 핵심이다.
철칙: 프로퍼티 레플리케이션은 항상 Authority(서버)에서 Proxy(클라이언트) 방향으로만 이루어진다.
🟧 프로퍼티 레플리케이션 설정 단계
네트워크 복제를 활성화하기 위해서는 다음의 세 가지 단계를 정확히 준수해야 한다.
| 단계 | 작업 내용 | 비고 |
| 1단계 | 액터 생성자에서 bReplicates = true; 설정 | 액터 자체의 복제 기능 활성화 |
| 2단계 | 헤더 파일의 변수 선언 시 Replicated 키워드 추가 | UPROPERTY(Replicated) 형식 |
| 3단계 | GetLifetimeReplicatedProps 함수 구현 | 복제될 속성을 매크로로 명시 |
🟦 코드 구현 예시
복제 로직을 구현할 때는 Net/UnrealNetwork.h 헤더 파일이 반드시 포함되어야 한다.
// .cpp 파일 예시
#include "Net/UnrealNetwork.h"
void AMyActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
// DOREPLIFETIME 매크로를 사용하여 복제할 변수 지정
DOREPLIFETIME(AMyActor, MyHealth);
}
🟧 복제 가능 여부 판별
프로퍼티 레플리케이션이 정상적으로 작동하기 위해서는 서버와 클라이언트 모두에 해당 액터가 존재해야 하며, 복제 설정이 올바르게 되어 있어야 한다.
- 상황 1: 서버에 액터가 없는 경우
- 프로퍼티 레플리케이션은 서버로부터 클라이언트로의 단방향성을 가지므로, 서버에 원본 액터가 존재하지 않는다면 복제 자체가 불가능하다.
- 상황 2: bReplicates가 false인 경우
- 서버에 액터가 있더라도 클라이언트 쪽에 액터가 복제되어 생성되지 않으므로, 속성 값을 전달할 대상이 없어 레플리케이션이 일어나지 않는다.
- 상황 3: 서버와 클라이언트 모두에 액터가 존재하는 경우
- 두 곳 모두에 액터가 존재하고 복제 설정이 활성화되어 있다면 정상적으로 프로퍼티 레플리케이션이 수행된다.
🟧 핵심 요약
- 레플리케이션은 서버의 데이터를 클라이언트로 복제하는 과정이며 단방향성을 띤다.
- 효율적인 네트워크 관리를 위해 특정 변수만 골라 복제하는 것이 프로퍼티 레플리케이션이다.
- 구현을 위해서는 bReplicates 설정, UPROPERTY 키워드 지정, GetLifetimeReplicatedProps 함수 오버라이딩이 필수적이다.
- 클라이언트(Proxy)는 서버(Authority)로부터만 값을 전달받을 수 있다는 점을 유념해야 한다.
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| 캐릭터 이동 메커니즘 개선 및 모션 매칭 적용 (0) | 2026.05.21 |
|---|---|
| 나이아가라 공격 궤적 이펙트 만들기 (0) | 2026.04.14 |
| NetMode, NetConnection, NetDriver (0) | 2026.03.19 |
| 서버의 종류와 데디케이티드 서버 (1) | 2026.03.18 |
| 이동 입력 차단 버그 분석 및 AnimNotify 기반 상태 복구 설계 (0) | 2026.03.09 |

