※この記事で使用しているUnrealのVersionは04.21.1です。

※この記事のサンプルプロジェクトは以下URLにアップされています
サンプルプロジェクト

UE4 c++を用いたデータテーブルを使った独自データアセットの作成
[UE4][C++] ユーザー定義オブジェクトのアセット化で楽をする

上記記事を見ていて、「そういえばBlueprintだけでも似たような事できる」と思いついたので、記事を書きます。

BPクラスのDataAsset レベル【★★】

冒頭で紹介している記事のDataAssetの継承元クラスは、「uDataAsset」で、Blueprintableなクラスではないので直接BPクラスへ継承してBPを作成出来ません。

今回ご紹介するのは、その代用品として「Primary Data Asset」というクラスを用いたDataAssetです。

作成方法としましては、まずDataAssetの元となるクラスをBPで作成します。

コンテンツブラウザ左↑の「新規作成」から「ブループリント」を選択します。

「Primary Data Asset」というクラスを選択して作成をします。

作成できたら今度は再び「新規作成」から詳細なアセット作成内にある「その他」→「データアセット」を選択します。

すると、クラス選択画面が出てくるので、先程自分が作成したクラスを選択します。

現状ではただ作成下だけなので、データアセットを開いてみてもなんにも項目がなく無意味なアセットになってしまっています。

では、作成したBPクラスの方を開いてみましょう。

まず、BP内に一つTMap型の変数を作成します。
KeyにはName型でValueにはObject型を定義してあげます。

この状態でコンパイルして先程作成したデータアセットを開いてみると、BPクラスで作成した変数が確認できるかと思います。

この状態であれば、手動で変数を編集して、適当なアセットを紐付けることが出来ます。

しかし、それでは使い勝手が悪いので少し使いやすくしてみます。

再びBPクラスを開いて処理を書きます。

Get Asset Data by Pathの中身

作成したカスタムイベントは、選択した状態で「詳細」ウィンドウ内の「グラフ」→「エディターで呼び出す」にチェックを入れます。

この状態でコンパイルボタンを押し、作成したデータアセットを開いてみます。

すると、カスタムイベント名のボタンと、追加した変数を編集する場所が増えていると思います。

この状態でPathとFilterClassを任意のものに指定してボタンを押すことで、指定したパス以下にある指定したクラスのアセットを参照付ける事ができます。

これをもっと拡張すれば、冒頭で紹介した記事に書いてある複数DTの統合などが割と簡単にBlueprint Onlyで行うことが出来ます。

アセットの参照を持ったアセットが出来たので、今度はこのデータアセットを通して参照したアセットを呼び出してみたいと思います。

適当なレベルのレベルBPを開き、最初にデータアセット用に定義したBPクラスの変数を作成します。

一度コンパイルし、定義した変数を選択した状態で、「詳細」ウィンドウの「デフォルト値」に作成したデータアセットを指定します。

今回はテストでレベルに置いたキューブのマテリアルをデータアセット内に格納しているマテリアルに変換します。

こんな感じで組むと、プレイ前は↓のようなキューブが

プレイすると↓になります。

しっかりとアセットの情報が取得できているのがわかります。

こんな感じで割と簡単に独自のアセットを作成することが出来ますので、みなさんも是非データアセットを使ってみてください。

※この記事のサンプルプロジェクトは以下URLにアップされています
サンプルプロジェクト