[UE_WorldPartition] ActorDesc

윤정민·2026년 7월 11일

WorldPartition

목록 보기
1/3
post-thumbnail

1. WorldPartition의 액터 관리

언리얼에서 월드파티션을 사용하지 않는 Level이라면 일반적으로 Level 패키지에 Actor를 포함한다.
하지만 월드파티션을 사용하는 Level은 월드 크기가 일반적인 케이스보다 N배 크고 포함되는 Actor도 많다.

이로 인해 Level에 포함해서 에디터에서 한번에 로드한다면 메모리 크래시가 발생하고 Level단위로 저장되기 때문에 분산 작업이 불가한 문제가 있다.

따라서, 액터 인스턴스의 데이터를 외부 파일에 저장하는 방법을 사용한다. (One File Per Actor, OFPA)

참고 문서: https://dev.epicgames.com/documentation/unreal-engine/one-file-per-actor-in-unreal-engine

해당 인스턴스를 로드하지 않고 정보를 가져오기 위한 메타 데이터를 WorldPartitionActorDesc로 구현한다.
이는 에디터 전용이다.

2. WorldPartitionActorDesc

아래 정보들을 통해 액터의 로드/언로드를 제어한다.
또한 액터를 직접 로드하지 않더라도 메타데이터를 통해 연산하기도 한다.

액터 저장 시 업데이트 되고 FAssetData에 저장된다.

2.1. FWorldPartitionActorDescInstance

UE5.4부터 Transient한 데이터를 분리해서 다루기 위해 FWorldPartitionActorDescInstance 클래스가 추가되었다.
실제로 데이터 Get과 같은 인터페이스 함수는 해당 클래스에서 처리한다.

엔진 업뎃했더니 함수가 다 없어져서 고생했었다...

3. UActorDescContainer

ActorDesc의 Add, Remove, Update 등에 대한 액션을 처리하고 관리하는 컨테이너 클래스

Transient 하게 존재한다.

3.1. UActorDescContainerInstance

Container가 Transient한데 Instance 클래스가 존재한다.

해당 클래스는 추상화 되는 구간이다.
ActorDescContinerInstance 베이스 클래스가 존재한다.

이를 상속받은 LevelInstanceContainerActorInstance가 존재한다.

따라서 어떤 Level(레벨 시스템)에 소속한 ActorDesc인지에 따라 액션을 다르게 처리하기 위한 클래스임을 알 수 있다.
또한 레벨 인스턴스처럼 Package는 1개이지만 N곳에 인스턴싱된 액터를 사용할 때 Instance를 N개 만들어서 제어할 수 있다.

4. UActorContainerSubsystem

UActorDescContainer를 관리하며, InvalidMapAssets을 통해 레벨이 존재하지 않지만 남은 고아 Actor 정보를 가지고 있다.

profile
그냥 하자

0개의 댓글