본문으로 건너뛰기
Unreal Engine 멀티플레이LESSON 20

Replication Condition으로 전송 대상 제한하기

난이도입문 → 초급
예상 시간75분
선수지식19강의 상태·이벤트 분류

20강. Replication Condition으로 전송 대상 제한하기

1. 이번 강의에서 해결할 문제​

모든 Property를 모든 클라이언트에 보내면 탄약·개인 UI 상태처럼 다른 플레이어에게 필요 없는 정보가 노출되고 대역폭도 낭비됩니다. 반대로 체력을 OwnerOnly로 제한하면 상대의 머리 위 체력바나 피격 표현에 필요한 데이터가 사라집니다. 데이터 소비자를 먼저 정해야 합니다.

2. 학습 목표​

3. 핵심 개념​

Replication Condition은 Property를 등록한 뒤 어떤 연결에 보낼지 추가로 제한합니다. OwnerOnly는 Actor의 Owning Connection, SkipOwner는 그 연결을 제외한 관련 클라이언트, InitialOnly는 Actor가 처음 복제될 때만 보냅니다. 조건은 전송 최적화·가시성 도구이지 클라이언트 메모리를 비밀 저장소로 만드는 완전한 보안 체계가 아닙니다.

4. 단계별 실습​

CaptureWeapon.h
UPROPERTY(ReplicatedUsing = OnRep_Ammo)
int32 CurrentAmmo = 12;

UPROPERTY(Replicated)
FName WeaponDefinitionId;

UPROPERTY(ReplicatedUsing = OnRep_RemoteAimYaw)
uint8 CompressedAimYaw = 0;

virtual void GetLifetimeReplicatedProps(
TArray<FLifetimeProperty>& OutLifetimeProps) const override;
CaptureWeapon.cpp
#include "Net/UnrealNetwork.h"

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

DOREPLIFETIME_CONDITION(
ACaptureWeapon, CurrentAmmo, COND_OwnerOnly);
DOREPLIFETIME_CONDITION(
ACaptureWeapon, WeaponDefinitionId, COND_InitialOnly);
DOREPLIFETIME_CONDITION(
ACaptureWeapon, CompressedAimYaw, COND_SkipOwner);
}

소유 클라이언트는 자신의 카메라·입력으로 Aim을 이미 알고 있어 SkipOwner로 원격 표현 데이터만 다른 연결에 보낼 수 있습니다. 탄약은 소유 HUD에 필요하므로 OwnerOnly입니다. 무기 정의가 런타임에 바뀔 가능성이 있으면 InitialOnly를 사용하면 안 됩니다.

PIE에서 두 클라이언트의 OnRep 로그를 나눠 CurrentAmmo는 소유자만, RemoteAim은 비소유자만 받는지 확인합니다. 서버는 원본을 보유하며 서버 코드에서 OnRep가 자동 호출될 것으로 기대하지 않습니다.

5. 코드가 동작하는 이유​

NetDriver는 Actor의 Owning Connection과 현재 관련 연결을 기준으로 각 Property 조건을 평가합니다. 조건이 있어도 값은 서버에서만 변경하고, 클라이언트가 보낸 발사 요청은 서버 탄약으로 검증합니다. 탄약을 다른 클라이언트에 안 보낸다는 사실과 서버 탄약 권한은 서로 다른 방어층입니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Replication Condition으로 전송 대상 제한하기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1다음 중 “Replication Condition으로 전송 대상 제한하기”의 핵심 요약을 실제 상황에 맞게 적용한 것은 무엇인가요?
  2. 문제 2“Replication Condition으로 전송 대상 제한하기” 실습 중 ‘공용 체력을 OwnerOnly로 숨김’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

20강. Replication Condition으로 전송 대상 제한하기 미완료 상태