기존 시스템과의 차이
Iris와 기존 Replication 시스템의 API 차이점
기능별 비교
기존 시스템 vs Iris
| 기능 | 기존 시스템 | Iris |
|---|---|---|
| 우선순위 | AActor::GetNetPriority() | Iris Prioritization API |
| 관련성 | IsNetRelevantFor() | Iris Filtering API |
| 서브오브젝트 복제 | ReplicateSubobjects() | Registered Subobject List |
| Dormancy | NetDormancy | 동일 |
| 프로퍼티 복제 | 동일 | 동일 |
| RPC | 동일 | 동일 |
| Replication Graph | 지원 | 미지원 (상호 배타적) |
서브오브젝트 복제 방식
ReplicateSubobjects() vs Registered List
기존 방식 (Iris에서 미지원)
// 기존 방식 - 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 호환 방식
// Iris 호환 방식 - 권장!
AMyActor::AMyActor()
{
// 생성자에서 활성화
bReplicateUsingRegisteredSubObjectList = true;
}
void AMyActor::ReadyForReplication()
{
Super::ReadyForReplication();
// 서브오브젝트 등록
if (MyComponent)
{
AddReplicatedSubObject(MyComponent);
}
}
ReplicateSubobjects()를 오버라이드하는 코드는 Iris에서 동작하지 않습니다. Registered Subobject List 방식으로 마이그레이션이 필수입니다.
우선순위와 관련성
Iris API 사용
- GetNetPriority() - Iris Prioritization API 사용
- IsNetRelevantFor() - Iris Filtering API 사용
- PreReplication() - 일부 기능 변경
Iris는 기본적으로 기존 우선순위/관련성 시스템과 호환됩니다. 고급 최적화가 필요한 경우에만 Iris 전용 API로 마이그레이션하세요.
Iris 호환 코드 패턴
양쪽 시스템 모두 지원하는 코드 작성법
조건부 컴파일로 양립
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 양쪽 모두에서 동작하며, 향후 마이그레이션 비용을 제거합니다.
핵심 요약
- 프로퍼티 복제, RPC - 기존과 동일
- 서브오브젝트 - Registered List 방식 필수
- Replication Graph - Iris와 상호 배타적
- 우선순위/관련성 - 기본 호환, 고급 기능은 Iris API
도전 과제
배운 내용을 직접 실습해보세요
ReplicateSubobjects()를 오버라이드하는 기존 Actor를 bReplicateUsingRegisteredSubObjectList = true와 AddReplicatedSubObject() 방식으로 변환하세요. ReadyForReplication()에서 서브오브젝트를 등록하세요.
UE_WITH_IRIS 전처리기 매크로를 사용하여 Iris와 기존 시스템 양쪽에서 동작하는 Actor를 구현하세요. 서브오브젝트 등록은 공통 코드로, 우선순위 로직은 조건부 컴파일로 분리하세요.
기존 Replication Graph 프로젝트를 Iris로 마이그레이션하는 전체 과정을 수행해보세요. ReplicateSubobjects 오버라이드 제거, Registered Subobject List 전환, DefaultEngine.ini의 NetDriver 변경까지 완료하고 기능 테스트를 수행하세요.