데이터 에셋(Data Asset) 은 해당 클래스의 인스턴스에 특정 시스템과 관련된 데이터를 저장하는 에셋입니다.
-
에셋(Assets) 은 UDataAsset에서 상속되는 네이티브 클래스를 사용하여 콘텐츠 브라우저에서 만들 수 있습니다. 데이터 상속이나 더 복잡한 계층구조를 원한다면 데이터 전용 블루프린트 클래스를 생성하는 것이 좋습니다.
-
프라이머리 데이터 에셋에서 상속하면 프라이머리 에셋 ID(Primary Asset Id) 가 구현되고 에셋 번들이 지원되므로 에셋 매니저에서 수동으로 로드 및 언로드할 수 있습니다.
-
네이티브 서브클래스의 인스턴스는 언리얼 에디터에서 데이터 에셋으로 직접 생성할 수 있으며 네이티브 클래스의 이름으로 PrimaryAssetType 을 사용합니다.
위 이미지와 같이 에디터에서 새 데이터 에셋을 생성할 때 네이티브 서브클래스 목록에서 선택하라는 메시지가 표시됩니다.
- 블루프린트 서브클래스를 생성하여 변수를 추가한 다음 해당 변수를 설정하는 데이터 전용 블루프린트(Data Only Blueprint)로 다시 서브클래스화할 수 있습니다. 블루프린트 서브클래스의 경우 데이터 에셋 인스턴스 대신 데이터 전용 블루프린트를 사용하여 데이터 상속을 처리하고 부모 클래스를 업데이트하는 것이 좋습니다.
데이터 에셋 생성하기
데이터 에셋 을 상속하거나 생성하려면 아래 단계를 따릅니다.
-
툴(Tools) > 새로운 C++ 클래스(New C++ Class) 로 이동한 다음 DataAsset 에 기반한 새 클래스를 생성합니다.
-
클래스 데이터 멤버를 추가합니다.
| USTRUCT() struct FMyAssetInfo { GENERATED_BODY() UPROPERTY(EditAnywhere) FString AssetName; UPROPERTY(EditAnywhere) UTexture2D* AssetThumbnail; UPROPERTY(EditAnywhere) UStaticMesh* AssetStaticMesh; }; UCLASS() class PROJECTExample_API UExampleDataAsset : public UDataAsset { GENERATED_BODY() UPROPERTY(EditAnywhere) TArray<FMyAssetInfo> AssetItems; }; |
-
프로젝트를 빌드합니다.
-
언리얼 에디터에서 콘텐츠 브라우저(Content Browser) 를 우클릭한 다음 기타(Miscellaneous) > 데이터 에셋(Data Asset) 을 선택합니다.
-
데이터 에셋 인스턴스에 대한 클래스를 선택하라는 메시지가 표시되면 해당 에셋이 목록에 채워집니다.
-
데이터 에셋 블루프린트 를 열어 멤버 변수를 관찰합니다.
프로퍼티 지정자를 사용하면 에셋의 모든 멤버 변수를 관찰할 수 있으므로 디자이너가 에디터에서 직접 데이터를 수정할 수 있습니다.
프라이머리 데이터 에셋
프라이머리 데이터 에셋(Primary Data Asset) 은 GetPrimaryAssetId
함수를 구현하고 에셋 번들을 지원하여 에셋 매니저에서 수동으로 로드 및 언로드할 수 있는 데이터 에셋입니다.
PrimaryAssetType 은 계층구조 상위의 첫 번째 네이티브 클래스 또는 최상위 레벨 블루프린트 클래스의 이름과 같습니다. 예를 들어 UPrimaryDataAsset
-> UParentNativeClass
-> UChildNativeClass
-> DataOnlyBlueprintClass
가 있는 경우 타입은 ChildNativeClass
가 됩니다.
또는 UPrimaryDataAsset
-> ParentBlueprintClass
-> DataOnlyBlueprintClass
가 있는 경우 타입은 ParentBlueprintClass
가 됩니다.
이 동작을 변경하려면 네이티브 클래스에서 GetPrimaryAssetId
함수를 오버라이드하거나 해당 함수를 다른 네이티브 베이스 클래스에 복사하면 됩니다.
프라이머리 데이터 에셋 생성하기
고유 프라이머리 데이터 에셋 을 상속하거나 생성하려면 아래 단계를 따릅니다.
-
툴 > 새로운 C++ 클래스 로 이동한 다음 PrimaryDataAsset에 기반한 새 클래스를 생성합니다.
-
클래스 멤버를 추가하고 GetPrimaryAssetID 함수를 오버라이드합니다.
| UCLASS() class PROJECTExample_API UExampleDataAsset : public UPrimaryDataAsset { GENERATED_BODY() UPROPERTY(EditAnywhere) FString AssetName; UPROPERTY(EditAnywhere) UTexture2D* AssetThumbnail; UPROPERTY(EditAnywhere) UStaticMesh* AssetStaticMesh; GetPrimaryAssetId() const override { return FPrimaryAssetId("AssetItems", GetFName()); } }; |
에셋 로드 및 언로드하기
언리얼 엔진 은 에셋 로드 및 언로드를 자동으로 처리하여 각 에셋이 필요할 때 개발자가 엔진에 요청하는 메서드를 제공합니다. 그러나 에셋을 검색, 로드, 검사하는 시기를 정밀하게 제어하고 싶을 수도 있습니다. 이러한 경우에는 에셋 매니저 사용을 권장합니다.
비동기 에셋 로딩
언리얼 엔진은 에셋 데이터의 비동기 로드 프로세스를 간소화합니다. 이러한 방법은 개발 중일 때와 디바이스의 쿠킹된 데이터에서 동일하게 작동하므로, 온디맨드 방식으로 데이터를 로드하기 위해 2개의 코드 경로를 유지할 필요가 없습니다.
비동기 에셋 로딩 문서를 참조하세요.