【UE4】DataTableの使い方-その① ~基本編~【★~★★】

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

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

DataTableって? 作り方は? レベル【★】

DataTableとは、例えばキャラクターの名前やパラメータのリストをUEで使用するためにアセット化したもの。(↓こんな感じ)

DataTableを作るには、まず「構造体」というものを作る必要があります。構造体とは

構造体を作るには、「コンテンツブラウザ」の左上にある「新規追加」のプルダウンから、詳細なアセット作成欄にある「ブループリント」→「構造体」をクリックします。

構造体の内容は、自分が作成したい項目の数だけ変数を追加してやります。(とりあえず↓こんな感じで作ってみました)

そして今度は、「コンテンツブラウザ」の左上にある「新規追加」のプルダウンから、詳細なアセット作成欄にある「その他」→「データテーブル」をクリックします。

作ったアセットを開くと、空っぽのリストが開きます。
ここにデータを追加したい場合は、「行エディタ」ウィンドウ内左上の「+」ボタンを押すことで、追加されます。

【注】DataTable内の項目の一番左(Key)は固定でName型になってしまいます。現状のUEでは他の型のKeyにすることは出来ません。

とりあえずこんな感じでDataTableを作成することが出来ます。

尚、DataTableはCSVorJSON形式で中身をエクスポートすることができます。
CSVで吐き出したものはエクセルで編集することが可能です!

【注】エクセルで編集し保存する際は、保存形式を「CSV(コンマ区切り)(*.csv)」にしないとUEで再インポートが出来ません。(場合によっては「CSV UTF-8(コンマ区切り)(*.csv)」で保存します。

編集したCSVをUEに再インポートするには、「コンテンツブラウザ」上のDataTableアセットを右クリック→「再インポート」をクリックしてください。
初回のみ、対象のCSVアセットのPathを選択します。

【注】CSVの置き場所を、作成したUnrealのプロジェクトのフォルダ以下にすると、プロジェクトからの相対パスになるため、複数PCでの作業をする場合はオススメ。

【注】UE04.21.0では、DataTableの再インポートがバグ? なのか出来ません。04.21.0で行う場合はBlutilityで無理やりやるなどで回避してください(丸投げ)

DataTableってどうやって使うの? レベル【★☆】

DataTableから値を取得したりする場合は、Blueprintで「データテーブル行を取得(Get DataTable Row)」という関数を使用します。

~引数~

DataTable:データテーブルのアセットを指定します。
RowName:DataTableの一番左のKeyの名前を指定します。

~返り値~

外側の列:RowNameで渡した値がDataTable内のKeyに存在する場合、その行のデータを取得することが出来ます。

※「DataTable」引数に何かしらのDataTableを指定すると、
1:引数の「RowName」がプルダウンになり、そのDataTableで使用しているKeyをプルダウンで選ぶことができる
2:返り値の「外側の列」の色が濃い青になり、そのDataTableで使われている構造体の型に変わります。
↓こんな感じ

「外側の列」内の特定の情報を参照したい場合は、構造体を分解してあげましょう。
「XXXXを分解(BreakXXXX)」というノード(XXXXは作成した構造体名)を使用することで分解できます。

テストで、以下のようなBlueprintを組んでみました。

結果は↓↓

と、このようにしてDataTableから必要なデータを引き出し・読み取る事ができます。

ちょいたし-複数DataTableを使う場合 レベル【★★】

「データテーブル行を取得(Get DataTable Row)」関数で指定するDataTableを変数にする場合、「データテーブル行を取得(Get DataTable Row)」と変数ピンをつなぐと、返り値の「外側の列」がWildcardのままになり、RowNameのプルダウンも当然出てきません。

しかし、構造体のピンにつないでやると、Wildcardなので、ちゃんと接続されます。

”同じ構造体”を使用しているDataTableならば、変数に入れてやるだけで問題なく機能します。

さて、では”違う構造体”を使用したDataTableならばどうでしょうか?

当然違う構造体だし、そもそもRowNameで指定したものがない場合などが殆どかもしれません。

では、試しにもう一つ別の構造体を使用したDataTableを作成してみました。

作ったDataTableのKeyには、「DT_Kinnaji」と同じものを入れました

この状態で、先程作ったBlueprintに少し手を加えてみました。

この状態でプレイすると……

Keyは存在するのに見つからなかったことになりました。

さらに、「アウトプットログ」ウィンドウにはこの処理が行われたタイミングで、以下のエラーが出ていました。

PIE: Error: Blueprint Runtime Error: “Incompatible output parameter; the data table’s type is not the same as the return type.”. Blueprint: PL_Kinnaji Function: Execute Ubergraph PL Kinnaji Graph: EventGraph Node: Get データ Table Row

しっかりKeyが見つかっても返り値の型が不一致の場合には通常処理に行かないようになっているようです。かしこい。

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

ゲーミングPCなら【FRONTIER】