PART 3 - 강의 2/3

기존 시스템과의 차이

Iris와 기존 Replication 시스템의 API 차이점

01

기능별 비교

기존 시스템 vs Iris

기능 기존 시스템 Iris
우선순위 AActor::GetNetPriority() Iris Prioritization API
관련성 IsNetRelevantFor() Iris Filtering API
서브오브젝트 복제 ReplicateSubobjects() Registered Subobject List
Dormancy NetDormancy 동일
프로퍼티 복제 동일 동일
RPC 동일 동일
Replication Graph 지원 미지원 (상호 배타적)
02

서브오브젝트 복제 방식

ReplicateSubobjects() vs Registered List

기존 방식 (Iris에서 미지원)

C++ - 기존 // 기존 방식 - Iris에서 동작하지 않음! bool AMyActor::ReplicateSubobjects( UActorChannel* Channel, FOutBunch* Bunch, FReplicationFlags* RepFlags) { bool bWroteSomething = Super::ReplicateSubobjects(Channel, Bunch, RepFlags); if (MyComponent) { bWroteSomething |= Channel->ReplicateSubobject( MyComponent, *Bunch, *RepFlags); } return bWroteSomething; }

Iris 호환 방식

C++ - Iris 호환 // Iris 호환 방식 - 권장! AMyActor::AMyActor() { // 생성자에서 활성화 bReplicateUsingRegisteredSubObjectList = true; } void AMyActor::ReadyForReplication() { Super::ReadyForReplication(); // 서브오브젝트 등록 if (MyComponent) { AddReplicatedSubObject(MyComponent); } }
마이그레이션 필수

ReplicateSubobjects()를 오버라이드하는 코드는 Iris에서 동작하지 않습니다. Registered Subobject List 방식으로 마이그레이션이 필수입니다.

03

우선순위와 관련성

Iris API 사용

기존 오버라이드 (Iris에서 무시됨)
  • GetNetPriority() - Iris Prioritization API 사용
  • IsNetRelevantFor() - Iris Filtering API 사용
  • PreReplication() - 일부 기능 변경
점진적 마이그레이션

Iris는 기본적으로 기존 우선순위/관련성 시스템과 호환됩니다. 고급 최적화가 필요한 경우에만 Iris 전용 API로 마이그레이션하세요.

04

Iris 호환 코드 패턴

양쪽 시스템 모두 지원하는 코드 작성법

조건부 컴파일로 양립

C++ void AMyActor::BeginPlay() { Super::BeginPlay(); #if UE_WITH_IRIS // Iris 전용 초기화 if (UE::Net::FReplicationSystemUtil:: GetReplicationSystem(this)) { // Iris 모드에서만 실행 InitIrisReplication(); } else #endif { // 기존 시스템 초기화 InitLegacyReplication(); } } // 서브오브젝트 등록 - 양쪽 모두 호환 AMyActor::AMyActor() { // 이 플래그는 Iris/기존 양쪽에서 동작 bReplicateUsingRegisteredSubObjectList = true; }
권장 전략

새 프로젝트에서는 처음부터 Registered Subobject List와 Push Model을 사용하세요. 이 두 패턴은 기존 시스템과 Iris 양쪽 모두에서 동작하며, 향후 마이그레이션 비용을 제거합니다.

SUMMARY

핵심 요약

  • 프로퍼티 복제, RPC - 기존과 동일
  • 서브오브젝트 - Registered List 방식 필수
  • Replication Graph - Iris와 상호 배타적
  • 우선순위/관련성 - 기본 호환, 고급 기능은 Iris API
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: ReplicateSubobjects 마이그레이션

ReplicateSubobjects()를 오버라이드하는 기존 Actor를 bReplicateUsingRegisteredSubObjectList = true와 AddReplicatedSubObject() 방식으로 변환하세요. ReadyForReplication()에서 서브오브젝트를 등록하세요.

실습 2: 양립 코드 작성

UE_WITH_IRIS 전처리기 매크로를 사용하여 Iris와 기존 시스템 양쪽에서 동작하는 Actor를 구현하세요. 서브오브젝트 등록은 공통 코드로, 우선순위 로직은 조건부 컴파일로 분리하세요.

심화 과제

기존 Replication Graph 프로젝트를 Iris로 마이그레이션하는 전체 과정을 수행해보세요. ReplicateSubobjects 오버라이드 제거, Registered Subobject List 전환, DefaultEngine.ini의 NetDriver 변경까지 완료하고 기능 테스트를 수행하세요.