データ アセット は、クラスのインスタンスの特定のシステムに関連するデータを格納するアセットです。
-
アセット は コンテンツ ブラウザ で UDataAsset から継承したネイティブのクラスを使用して作成できます。データの継承またはさらに複雑な階層が必要な場合は、データ専用ブループリント クラスを作成することをお勧めします。
-
プライマリ データ アセット から継承を行うと プライマリ アセット ID が継承され、アセット バンドルのサポートも備えることができます。これによって、アセット マネージャー を使用して手動でロードおよびアンロードできます。
-
ネイティブ サブクラスのインスタンスは Unreal Editor でデータ アセットとして直接作成できます。また、ネイティブ クラスの名前を PrimaryAssetType として使用します。

上の画像では、エディタ内で新しいデータ アセットを作成すると、ネイティブ サブクラスのリストから選択するよう促されます。
- ブループリント サブクラスは、変数を追加するために作成でき、これらの変数を設定したデータ専用ブループリントによって再度サブクラス化できます。ブループリント サブクラスを使用する場合は、データ アセット インスタンスではなくデータ専用ブループリントを使用し、データ継承を処理し、親クラスをアップデートすることをお勧めします。
データ アセットを作成する
独自の データ アセット を継承または作成する場合は、以下の手順に従ってください。
-
[Tools (ツール)] > [New C++ Class (新規 C++ クラス)] に移動し、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; }; | -
プロジェクトをビルドします。
-
Unreal Editor で、コンテンツ ブラウザ を右クリックし、[Miscellaneous (その他)] > [Data Asset (データ アセット)] を選択します。
-
データ アセット インスタンスのクラスを選択するよう促された場合、アセットをリスト内に追加する必要があります。
-
データ アセット ブループリント を開いてメンバー変数を観察します。
プロパティ指定子 を使用する場合は、アセット内のすべてのメンバー変数を観察できるため、デザイナーはエディタから直接データを変更できます。
プライマリ データ アセット
プライマリ データ アセット は、GetPrimaryAssetId 関数を実装するデータ アセットであり、アセット バンドル サポートを備えています。これによってアセット マネージャから手動でロード/アンロードすることができます。
PrimaryAssetType は、階層を上った最初のネイティブ クラスの名前または最高レベルのブループリント クラスと等価です。たとえば、UPrimaryDataAsset -> UParentNativeClass -> UChildNativeClass -> DataOnlyBlueprintClass の場合、タイプは ChildNativeClass です。
または、UPrimaryDataAsset -> ParentBlueprintClass -> DataOnlyBlueprintClass の場合、タイプは ParentBlueprintClass です。
この動作を変更するには、GetPrimaryAssetId 関数をネイティブ クラスでオーバーライドするか、これらの関数を異なるネイティブ ベース クラスにコピーします。
プライマリ データ アセットを作成する
プライマリ データ アセットを継承または作成する場合は、以下の手順に従ってください。
-
[Tools] > [New C++ Class] に移動し、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()); } }; |
アセットをロードおよびアンロードする
Unreal Engine では、自動的に アセット のロードおよびアンロードが自動的に処理され、各アセットが必要な際にエンジンと通信するための手段がデベロッパーに提供されます。ただし、アセットを検出、ロード、監査するタイミングについて、細かくコントロールしたい場合もあります。このような場合は、アセット マネージャー を使用することをお勧めします。
非同期のアセットのロード
Unreal Engine では、アセット データを非同期でロードするプロセスが簡素化されます。こうした方法は、開発でも同じように、またデバイスではクック済みデータを使用して機能するため、データをロードするためにオンデマンドで 2 つのコード パスを維持する必要はありません。
「非同期のアセットのロード」のドキュメントを参照してください。