데이터 레이어(Data Layers) 는 월드 파티션 내에 있는 시스템으로, 액터를 구성하기 위해 에디터와 런타임 모두에서 사용할 수 있습니다.
데이터 레이어가 있는 샘플 레벨입니다.
데이터 레이어 에셋(Data Layer Assets)과 데이터 레이어 인스턴스(Data Layer Instances)를 사용하면 에디터에서 레이어를 동적으로 로드하거나 언로드하여 복잡한 월드를 관리할 수 있습니다. 이 시스템은 언리얼 엔진 이전 버전의 기존 레이어 시스템을 대체합니다.
데이터 레이어를 사용하여 에디터에서 게임플레이 엘리먼트와 환경 에셋을 분리할 수 있습니다. 아티스트는 게임플레이 트리거나 오브젝트와 상호작용 없이 특정 엘리먼트를 작업할 수 있습니다. 디자이너는 동적으로 로드된 레이어를 사용하여 흥미로운 게임플레이와 정교한 레벨 트랜지션을 디자인할 수 있습니다.
런타임 때 블루프린트나 C++ 코드로 데이터 레이어를 토글하여 퀘스트, 진행률, 게임 내 이벤트 등의 게임플레이를 구동할 수 있습니다. 데이터 레이어는 월드 파티션 워크플로에서 에셋 스트리밍을 관리하는 중요한 툴입니다.
데이터 레이어 생성하기
데이터 레이어는 데이터 레이어 에셋과 데이터 레이어 인스턴스라는 두 가지 에셋 타입으로 나뉩니다. 데이터 레이어 에셋에는 크로스 월드 데이터가 포함되며, 데이터 레이어 아웃라이너(Data Layers Outliner)를 사용하여 생성할 수도 있고 콘텐츠 브라우저(Content Browser) 에서 생성할 수도 있습니다. 데이터 레이어 인스턴스에는 월드 특정 데이터가 포함되며 데이터 레이어 아웃라이너 에서 생성됩니다.
데이터 레이어 시스템을 사용하려면 맵에서 월드 파티션(World Partition) 을 활성화해야 합니다. 툴(Tools) > 레벨 변환(Convert Level) 또는 커맨드릿을 사용하여 맵을 월드 파티션으로 변환할 수 있습니다. 기존 레벨을 월드 파티션으로 변환하는 자세한 방법은 월드 파티션을 참조하세요.
데이터 레이어 에셋
데이터 레이어 에셋은 콘텐츠 브라우저에서 생성하고 볼 수 있는 언리얼 엔진 에셋입니다. 데이터 레이어 에셋은 프로젝트 수준으로 존재하며 월드에 한정되지 않습니다. 데이터 레이어 에셋에는 다음 데이터가 포함됩니다.
- 데이터 레이어 이름(Data Layer Name)
- 데이터 레이어 타입(Data Layer Type)
- 디버그 컬러(Debug Color)
데이터 레이어 타입
데이터 레이어 에셋은 두 가지 타입인 에디터(Editor) 와 런타임(Runtime) 중 하나로 설정됩니다. 에디터 데이터 레이어(Editor Data Layers) 를 사용하여 프로젝트 내 자산을 체계적으로 유지할 수 있습니다. 메모리에서 에디터 데이터 레이어를 로드하거나 언로드할 수 있으며, 데이터 레이어 아웃라이너를 사용하여 비저빌리티를 토글할 수 있습니다.
데이터 레이어 에셋의 옵션을 설정합니다.
에디터 및 런타임 데이터 레이어를 콘텐츠 브라우저에서 열면 프로퍼티가 동일합니다.
런타임 데이터 레이어(Runtime Data Layers) 는 에디터 데이터 레이어와 비슷하지만, 런타임 시 블루프린트나 C++로 조작할 수 있습니다. 게임 내 이벤트를 사용하여 런타임 데이터 레이어에 할당된 에셋을 로드하거나 언로드하면 복잡한 게임플레이 또는 레벨 트랜지션을 위한 다양한 옵션을 이용할 수 있습니다. 예를 들어, 에인션트의 협곡 샘플에 런타임 데이터 레이어를 사용하여 라이트 월드와 다크 월드 사이의 트랜지션을 생성했습니다.


데이터 레이어 인스턴스
데이터 레이어 인스턴스 는 데이터 레이어 에셋의 월드 특정 인스턴스입니다. 하나의 데이터 레이어 에셋은 인스턴스들을 통해 둘 이상의 월드에 존재하면서 같은 에셋들을 참조하지만, 다른 인스턴스 프로퍼티들을 지정할 수 있습니다.
예를 들어, 월드에 이웃 관심 지점(POI)을 생성하고 에셋들을 한 에디터 데이터 레이어에 할당하여 에셋들을 체계적으로 유지할 수 있습니다. 그런 다음, 홀리데이 특정 에셋을 사용하여 POI를 장식하고 해당 에셋을 런타임 데이터 레이어에 할당하여 런타임 시 로드하거나 언로드할 수 있습니다. 월드의 일반 버전에서는 런타임 데이터 레이어의 데이터 레이어 인스턴스를 기본적으로 로드되지 않게 설정하고 지정된 날짜를 토글하여 게임 내 홀리데이를 기념하게 할 수 있습니다. 그런 다음, 같은 프로젝트에서 항상 활성화되어 있는 별도의 런타임 데이터 레이어의 인스턴스를 사용하여 일반 월드와는 별개로 홀리데이 테마의 POI 버전을 생성할 수 있습니다.
데이터 레이어 아웃라이너
데이터 레이어 아웃라이너 는 기존 데이터 레이어 인스턴스를 전부 보고 새 데이터 레이어 에셋과 데이터 레이어 인스턴스를 생성하는 데 사용됩니다. 데이터 레이어 아웃라이너를 열려면 창(Window) > 월드 파티션 > 데이터 레이어 아웃라이너 를 선택합니다.
데이터 레이어 아웃라이너입니다.
번호 | 설명 |
---|---|
1 | 비저빌리티 |
2 | 에디터에 로드된 데이터 레이어 |
3 | 데이터 레이어 타입 |
4 | 데이터 레이어 이름 |
5 | 데이터 레이어 유효성 검사 |
6 | 데이터 레이어 아웃라이너 옵션 |
7 | 데이터 레이어 에셋 |
8 | 초기 표시 여부 |
9 | 초기 로드 여부 |
10 | 초기 런타임 스테이트 |
데이터 레이어 아웃라이너를 우클릭하면 컨텍스트 메뉴가 열립니다.
데이터 레이어 아웃라이너 컨텍스트 메뉴입니다.
선택 | 설명 |
---|---|
새 데이터 레이어 생성(Create New Data Layer) | 새로운 빈 데이터 레이어 인스턴스를 생성합니다. |
"DL_Sample" 아래에 새 데이터 레이어 생성(Create New Data Layer under "DL_Sample") | 선택한 데이터 레이어의 자손으로 새로운 빈 데이터 레이어 인스턴스를 생성합니다. |
선택된 데이터 레이어에 선택된 액터 추가(Add Selected Actors to Selected Data Layer) | 선택한 데이터 레이어 인스턴스에 선택한 액터를 추가합니다. |
데이터 레이어 이동(Move Data Layers To) | 기존 데이터 레이어 인스턴스를 다른 데이터 레이어의 자손으로 만듭니다. |
선택된 데이터 레이어에서 선택된 액터 제거(Remove Selected Actors from Selected Data Layers) | 선택한 데이터 레이어 인스턴스에서 선택한 액터를 제거합니다. |
선택된 데이터 레이어 삭제(Delete Selected Data Layers) | 선택한 데이터 레이어를 삭제합니다. |
선택된 데이터 레이어 이름 변경(Rename Selected Data Layers) | 선택한 데이터 레이어의 이름을 변경합니다. 레거시 데이터 레이어에서만 가능합니다. |
데이터 레이어의 액터 선택(Select Actors in Data Layers) | 선택한 데이터 레이어 인스턴스에 할당된 모든 액터를 선택합니다. |
데이터 레이어에 포함된 액터 추가 선택(Append Actors in Data Layer to Selection) | 선택한 데이터 레이어 인스턴스의 콘텐츠를 선택 항목에 추가합니다. |
데이터 레이어에 액터 선택 해제(Deselect Actors in Data Layer) | 선택한 데이터 레이어의 콘텐츠를 현재 선택 항목에서 제거합니다. |
모든 데이터 레이어 접기(Collapse All Data Layers) | 데이터 레이어 계층구조를 접습니다. |
모든 데이터 레이어 펼치기(Expand All Data Layers) | 데이터 레이어 계층구조를 펼칩니다. |
현재 데이터 레이어 만들기(Make Current Data Layer) | 선택한 데이터 레이어를 현재 액터 에디터 컨텍스트로 설정합니다. 액터 에디터 컨텍스트에 대한 자세한 내용은 액터 에디터 컨텍스트 문서를 참조하세요. |
현재 데이터 레이어 제거(Remove Current Data Layer) | 현재 액터 에디터 컨텍스트에서 선택한 데이터 레이어를 제거합니다. |
현재 데이터 레이어 지우기(Clear Current Data Layer) | 현재 액터 에디터 컨텍스트에서 모든 데이터 레이어를 지웁니다. |
모든 데이터 레이어 보이게 만들기(Make All Data Layers Visible) | 모든 데이터 레이어 인스턴스의 비저빌리티를 보이도록 설정합니다. |
톱니바퀴 아이콘을 클릭하면 데이터 레이어 아웃라이너 옵션이 표시됩니다.
데이터 레이어 아웃라이너 옵션입니다.
선택 | 설명 |
---|---|
모두 펼치기(Expand All) | 데이터 레이어 계층구조를 펼칩니다. |
모두 접기(Collapse All Data Layers) | 데이터 레이어 계층구조를 접습니다. |
스택 계층구조 헤더(Stack Hierarchy Headers) | 아웃라이너 상단에 계층구조 항목을 고정합니다. |
선택 항목만(Only Selection) | 아웃라이너에 선택한 액터만 표시합니다. |
에디터 데이터 레이어 숨기기(Hide Editor Data Layers) | 아웃라이너에서 에디터 데이터 레이어를 숨깁니다. |
런타임 데이터 레이어 숨기기(Hide Runtime Data Layers) | 아웃라이너에서 런타임 데이터 레이어를 숨깁니다. |
액터 숨기기(Hide Actors) | 아웃라이너에서 데이터 레이어에 할당된 액터 목록을 숨깁니다. |
언로드된 액터 숨기기(Hide Unloaded Actors) | 아웃라이너에서 언로드된 월드 파티션의 모든 액터를 숨깁니다. |
레벨 인스턴스 콘텐츠 숨기기(Hide Level Instance Content) | 레벨 인스턴스 내부에 포함된 모든 에셋을 숨깁니다. |
선택 하이라이트(Highlight Selected) | 선택한 액터를 포함하는 데이터 레이어 인스턴스를 하이라이트합니다. |
런타임 데이터 레이어 편집 허용(Allow Runtime Data Layer Editing) | 런타임 데이터 레이어 인스턴스의 편집을 허용합니다. |
사용자 세팅 리셋(Reset User Settings) | 데이터 레이어 아웃라이너 세팅을 기본값으로 리셋합니다. |
월드 선택(Choose World) | 어느 월드의 데이터 레이어 인스턴스를 표시할지 결정합니다. |
데이터 레이어 커맨드릿을 사용하여 레거시 프로젝트 업데이트하기
데이터 레이어 에셋과 데이터 레이어 인스턴스를 사용하도록 기존 에셋을 업데이트하려면 데이터 레이어에서 에셋으로(Data Layer To Asset) 커맨드릿을 사용합니다.
데이터 레이어에서 에셋으로 커맨드릿의 형식입니다.
커맨드릿을 사용하려면 다음 단계를 따릅니다.
- 명령 프롬프트 창을 엽니다.
명령 프롬프트 창을 엽니다.
- 프롬프트에서
UnrealEditor.exe
파일이 있는 위치로 이동합니다. 예를 들면,C:\Program Files\Epic Games\UE_5.1\Engine\Binaries\Win64
와 같은 경로입니다.
엔진 실행 파일이 있는 위치로 이동합니다.
- 명령을 입력합니다. 커맨드릿을 실행할 .exe 파일의 이름인
UnrealEditor.exe
로 명령어 작성을 시작합니다.
UnrealEditor.exe 로 커맨드릿을 시작합니다.
- 프로젝트 이름을 추가합니다.
UnrealEditor.exe CitySample 같은 프로젝트 이름을 추가합니다.
- 다음으로 실행할 커맨드릿 이름을 추가합니다.
커맨드릿 이름을 추가합니다. 이 예시에서는 UnrealEditor.exe CitySample -run=DataLayerToAssetCommandlet 입니다.
- 마지막으로 변환할 레벨의 이름과 대상 폴더를 추가합니다.
레벨 이름과 대상 폴더를 추가하여 마무리합니다. UnrealEditor.exe CitySample -run=DataLayerToAssetCommandlet Small_CITY_LVL -DestinationFolder=/Game/DataLayerConversion .
- Enter 를 눌러 커맨드릿을 실행합니다.
이전의 모든 데이터 레이어가 데이터 레이어 인스턴스와 데이터 레이어 에셋으로 변환됩니다. 전에 데이터 레이어를 참조하던 모든 액터는 이제 데이터 레이어 에셋을 참조합니다.
이 커맨드릿은 필요에 따라 다음과 같은 실행인자를 사용할 수 있습니다.
실행인자 옵션 | 설명 |
---|---|
-Verbose | 변환 시 추가 컨텍스트를 로그로 기록합니다. 데이터 레이어가 있는 모든 액터의 변환 정보를 출력합니다. |
-NoSave | 변경사항의 저장 없이 커맨드릿을 실행합니다. |
-IgnoreActorLoadingErrors | 변환 중 액터를 로드하지 못했을 때 오류를 무시합니다. |
데이터 레이어 사용하기
새 데이터 레이어 생성하기
프로젝트에서 데이터 레이어 시스템을 사용하려면 먼저 데이터 레이어 에셋을 생성해야 합니다.
데이터 레이어 에셋을 생성합니다.
- 콘텐츠 브라우저 에서 데이터 레이어 에셋을 저장할 폴더로 이동한 다음, 우클릭하고 기타(Miscellaneous) > 데이터 레이어(Data Layer) 를 선택하여 데이터 레이어 에셋을 생성합니다.
- 데이터 레이어 아웃라이너 를 우클릭하고 새 데이터 레이어 생성 을 선택합니다. 그러면 아웃라이너에 알 수 없음(Unknown) 이라는 빈 데이터 레이어 인스턴스가 생성됩니다.
- 데이터 레이어 에셋을 새 인스턴스에 할당하기 위해 데이터 레이어 에셋 옆의 드롭다운 메뉴를 열고 데이터 레이어 에셋을 선택합니다.
또는 데이터 레이어 에셋을 데이터 레이어 아웃라이너에 드래그 앤 드롭하여, 선택한 데이터 레이어 에셋이 할당된 새로운 데이터 레이어 인스턴스를 생성할 수도 있습니다. 기존 데이터 레이어 인스턴스에 이 작업을 하면 선택한 데이터 레이어 에셋이 할당된 새로운 자손 데이터 레이어 인스턴스가 생성됩니다.
데이터 레이어 인스턴스에 데이터 레이어 에셋을 할당합니다.
데이터 레이어에 액터 할당하기
다음 옵션을 통해 데이터 레이어에 액터를 할당할 수 있습니다.
- 데이터 레이어 아웃라이너의 컨텍스트 메뉴를 사용하여 에셋을 추가합니다.
- 디테일 패널의 데이터 레이어 섹션을 사용하여 에셋을 추가합니다.
데이터 레이어 아웃라이너 사용하기
데이터 레이어 아웃라이너를 사용하여 데이터 레이어 인스턴스에 액터를 할당합니다.
데이터 레이어 아웃라이너를 사용하여 데이터 레이어 인스턴스에 액터를 추가하는 방법은 다음과 같습니다.
- 데이터 레이어 인스턴스에 추가할 에셋을 뷰포트 에서 선택합니다.
- 데이터 레이어 아웃라이너 에서 추가하려는 데이터 레이어 인스턴스를 우클릭하고 선택한 데이터 레이어에 선택한 액터 추가(Add Selected Actors to Selected Data Layers) 를 선택합니다.
디테일 패널 사용하기
디테일 패널을 사용하여 데이터 레이어 인스턴스에 액터를 할당합니다.
디테일 패널을 사용하여 데이터 레이어 인스턴스에 액터를 추가하는 방법은 다음과 같습니다.
- 데이터 레이어 인스턴스에 추가할 에셋을 뷰포트 에서 선택합니다.
- 디테일(Details) 의 데이터 레이어 섹션으로 이동하여 데이터 레이어 에셋을 엽니다.
- 변경할 인덱스(Index) 의 드롭다운 메뉴를 클릭하고 할당하려는 데이터 레이어 에셋을 선택합니다. 그러면 해당 데이터 레이어 에셋의 인스턴스에 할당됩니다.
이 방식은 선택한 데이터 레이어 에셋의 인스턴스가 월드에 있을 때만 작동합니다.
레벨 에디터에서 액터 에디터 컨텍스트를 사용하면 원하는 수의 데이터 레이어 인스턴스를 현재(Current)로 설정할 수 있습니다. 이 컨텍스트가 활성 상태로 추가된 모든 액터는 현재라고 설정된 데이터 레이어 인스턴스에 자동으로 할당됩니다. 액터 에디터 컨텍스트에 대한 자세한 내용은 액터 에디터 컨텍스트를 참조하세요.
퍼포먼스 문제
데이터 레이어를 사용하여 동시에 너무 많은 에셋을 로드하면 퍼포먼스 문제가 발생할 수 있습니다.
런타임 데이터 레이어 인스턴스 사용량을 면밀히 주시해야 합니다. 광범위하게 사용하는 에셋을 너무 많은 수의 런타임 데이터 레이어 인스턴스에 할당하면 월드 파티션 스트리밍 퍼포먼스가 저하될 수 있습니다.
블루프린트와 함께 데이터 레이어 사용하기
블루프린트를 사용하면 데이터 레이어 에셋과 데이터 레이어 인스턴스의 런타임 스테이트를 변경할 수 있습니다.
아래 예시에서 F 를 길게 누르면 GreyBox 데이터 레이어가 비활성화되고 Ruins 데이터 레이어가 활성화됩니다.
데이터 레이어를 사용하는 블루프린트입니다.
위 블루프린트는 다음 작업을 통해 작동합니다.
- F 를 길게 누르면 데이터 레이어 서브시스템(Data Layer Subsystem) 에 액세스합니다.
- Set Data Layer Instance Runtime State 노드를 사용하면 DL_GreyBox 데이터 레이어 인스턴스의 상태가 Loaded 로 변경됩니다. 그러면 데이터 레이어가 로드되지만 레벨에 표시되지는 않습니다.
- 두 번째 Set Data Layer Instance Runtime State 노드는 DL_Ruins 데이터 레이어 인스턴스의 스테이트를 Activated 로 변경합니다. 그러면 데이터 레이어가 로드되고 표시됩니다.
- F 에서 손을 떼면 이 프로세스가 반대로 진행되며 두 데이터 레이어 인스턴스 모두 원래 상태로 설정됩니다.


C++로 데이터 레이어 사용하기
위의 블루프린트 예시와 비슷하게 C++을 사용하여 프로젝트의 데이터 레이어에 액세스할 수도 있습니다. 아래의 예시 코드는 ADataLayerActivator 라는 이름의 액터를 생성합니다.
UCLASS()
class ENGINE_API ADataLayerActivator : public AActor
{
GENERATED_BODY()
public:
virtual void BeginPlay() override
{
// 클라이언트/서버에서 오직 서버만 DataLayer를 활성화합니다.
if (HasAuthority())
{
if (UDataLayerSubsystem* DataLayerSubsystem = UWorld::GetSubsystem<UDataLayerSubsystem>(GetWorld()))
{
DataLayerSubsystem->SetDataLayerInstanceRuntimeState(DataLayerToActivate, EDataLayerRuntimeState::Activated);
}
}
}
private:
UPROPERTY(EditAnywhere, Category = "DataLayer")
TObjectPtr<const UDataLayerAsset> DataLayerToActivate;
};
ADataLayerActivator 가 BeginPlay 를 호출할 때, 특정 데이터 레이어를 참조하고 그 데이터 레이어의 런타임 스테이트를 Active 로 설정합니다.
레벨 인스턴싱으로 데이터 레이어 사용하기
레벨 인스턴스 와 패킹된 레벨 블루프린트(Packed Level Blueprints) 는 데이터 레이어를 지원합니다.
레벨 인스턴스 안에 포함된 액터는 기본적으로 해당 레벨 인스턴스 액터에 할당된 데이터 레이어를 상속합니다. 레벨 인스턴스 내 액터는 추가 데이터 레이어도 지원합니다.
월드에 현재 없는 데이터 레이어 인스턴스의 레퍼런스를 포함하는 레벨 인스턴스는 데이터 레이어 레퍼런스를 전달하지 않습니다.
예를 들어, 하우스 관심 지점을 생성할 에셋이 포함된 레벨 인스턴스를 이웃 데이터 레이어에 할당할 수 있습니다. 레벨 인스턴스는 데이터 레이어가 활성화된 경우에만 표시되는 다른 홀리데이 데이터 레이어에 할당된 홀리데이 테마 아이템을 포함할 수도 있습니다.
파일 관리하기
사용자 간의 파일 오버랩을 최소화하려는 월드 파티션 시스템의 목표에 따라, 데이터 레이어는 변경이 이루어질 때 사용자가 월드 맵 파일이나 액터 파일 같은 중요한 파일을 체크아웃할 필요를 줄여줍니다.
각 데이터 레이어에는 디스플레이 라벨과 내부 고유 식별자가 있습니다. 언리얼 엔진은 이 정보를 WorldDataLayer 파일의 데이터 레이어 목록에 저장하며, 이는 다음과 같은 이점을 제공합니다.
- 액터에 데이터 레이어를 할당해도 액터당 한 개의 파일(One File Per Actor)을 사용하는 월드 파티션 월드에서 해당 액터의 파일에만 영향을 줍니다.
- 데이터 레이어의 이름을 변경해도 연결된 라벨에만 영향을 줍니다. 레이어와 연결된 어떤 액터도 업데이트할 필요가 없습니다.
- 데이터 레이어를 삭제하면 WorldDataLayer 파일에만 영향을 줍니다. 삭제된 데이터 레이어와 연결되어 있던 액터는 수정하거나 저장할 필요 없이 자동으로 정리됩니다.
디버깅 및 런타임 오버라이드
런타임 시 데이터 레이어 디버깅에 유용한 콘솔 명령이 몇 개 있습니다.
콘솔 명령 | 설명 |
---|---|
wp.DumpDatalayers | 로그에 데이터 레이어 목록과 런타임 스테이트를 출력합니다. |
wp.Runtime.DebugFilerByDatalayer | 어떤 데이터 레이어를 런타임 해시 2D 디버그 디스플레이에 표시할지 필터링합니다. |
wp.Runtime.SetDataLayerRuntimeState [state] [layer] | 데이터 레이어를 특정 런타임 스테이트로 만듭니다. |
wp.Runtime.ToggleDataLayerActivation [layer] | 특정 런타임 데이터 레이어를 토글합니다. |
wp.Runtime.ToggleDrawDataLayers | 메인 뷰에 데이터 레이어 목록과 스테이트를 표시합니다. |