UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 DataTableで特定の数値を持ってくる

今回はDataTableを使用して、外部からの数値を持ってきたいと思います。

 

こちらのブログを参考にしました。

[UE4] CSVデータを扱う方法 DataTable編 | historia Inc - 株式会社ヒストリア

 

UE4のバージョンは4.14.0です。

 

準備

※今回はOpenOfficeCalcを使用しています。

 Excelの場合は少し操作が違うかもしれません。

 

まずは前準備としてExcelやOpenOfficeCalcなどで

UE4上でパラメータにしたいものを設定しましょう。

パラメータになるものを横に書いていき、

そのパラメータを持つものを縦に書きましょう。

f:id:MozPaca:20161124183605p:plain

今回はこんな感じでCard03がすごく強いパラメータを作りました。 

 

このファイルを別名保存します。

名前は適当にCardDataにします。

ファイルの種類は.csvにしましょう。

f:id:MozPaca:20161124183741p:plain

 

保存ボタンを押すとエクスポートオプションが出てきます。

文字列を「絶対に」Unicode(UTF-8)に変更してください。

UTF-8でないと.csvに日本語が含まれていた場合文字化けします。

その他は特に変更の必要はありません。

OKボタンを押して保存を完了しましょう。

f:id:MozPaca:20161124183749p:plain

 

構造体を作成する

早速.csvをUE4にインポートしたいところですが、

まずは構造体を作成しましょう。

コンテンツブラウザで右クリック→Blueprints→Structure

f:id:MozPaca:20161124183757p:plain

適当に名前を付けましょう。

先ほどCardのパラメータを作成したので

私はStruct_Cardにします。

f:id:MozPaca:20161124183845p:plain

 

この構造体を開き、先ほど作成した.csvのパラメータを

戻り値も含めて作成します。

f:id:MozPaca:20161124183852p:plain

構造体を作成したら保存して閉じてください。

 

UE4に.csvをインポートする

次に.csvのインポートをします。

インポートボタンをクリックしてファイルを指定するか、

csvファイルをコンテンツブラウザにドラッグ&ドロップでインポートしましょう。

 

ファイルをインポートすると、このような画面が出現すると思います。

Choose DataTable Row Type:に先ほどを作成した構造体を入れてください。

f:id:MozPaca:20161124183910p:plain

このような感じですね。

f:id:MozPaca:20161124183920p:plain

ではOKボタンを押してください。

 

DataTableを編集する

.csvはUE4にインポートされるとDataTableとして扱われます。

DataTableを開きましょう。

恐らくこのような画面になると思います。

もし、文字化けしていたり数値が変だった場合には

文字コードを見直したり、構造体を再確認してください。

f:id:MozPaca:20161124183928p:plain

 

DataTableでは新しく要素を追加することができます。

画像の右上の+ボタンをクリックすると、

f:id:MozPaca:20161124183938p:plain

 

DataTableに要素が1つ足されます。

もちろんパラメータの数値を変更することも可能です。

f:id:MozPaca:20161124183946p:plain

 

同様に構造体の方にも変数を追加してみましょう。

戻り値にはBoolやVectorのほかに

BlueprintやSoundCue、列挙体などを入れることもできます。

f:id:MozPaca:20161124184118p:plain

 

するとDataTableの方でパラメータが一つ増えています。

f:id:MozPaca:20161124184129p:plain

 

ファンクションライブラリを作成する

せっかくなので汎用的に使えるようにしたいと思います。

コンテンツブラウザを右クリック→Blueprints→Blueprints Function Libraryを

選択してください。

f:id:MozPaca:20161124184140p:plain

 

名前を付けましょう。

f:id:MozPaca:20161124184151p:plain

 

ファンクションライブラリは関数専用のブループリントです。

この関数は一部の例外を除いてグローバルに呼び出せるため非常に

使い勝手がいいです。

f:id:MozPaca:20161124184206p:plain

 

処理を組んでいきます。

関数の全体図

f:id:MozPaca:20161124184945p:plain

 

Get Data Table Row Names及びGet Data Table Rowには

先ほど作成した構造体を入れましょう。

f:id:MozPaca:20161124184447p:plain

 

関数のInputノードとOutputノードはこんな感じ。

Inputノードには呼びたいデータのIndex番号を追加し、

Outputノードにはパラメータを出力するためのピンを追加します。

f:id:MozPaca:20161124184931p:plain

 

(少し細かくスクショ撮りました)

関数が呼び出されたときに、DataTable内のRow要素をForEachLoopで見ます。

呼び出し前に指定した配列番号と一致したものがあれば次に。

f:id:MozPaca:20161124185027p:plain

 

呼び出し前に指定した配列番号と一致したものがあれば、

そのDataTableのデータをReturnノードから出力します。

f:id:MozPaca:20161124185052p:plain

 

ForEachLoopで指定した配列番号と一致するものがなかった場合、

要素をすべて0でRertunします。

f:id:MozPaca:20161124185102p:plain

 

欲しいデータを呼び出してみる

レベルブループリントを開き、このように処理を組みます。

作成した関数を呼び出します。

今回はめんどくさくなったので特殊効果のStringのみを呼び出します。

Table Row IndexにはCard03を呼び出すように配列番号2を入れておきます。

( 配列は0からなので1つズレます )

f:id:MozPaca:20161125110249p:plain

実行し、Pキーを押すと

f:id:MozPaca:20161124185124p:plain

 出ました。

 

これは非常に使い勝手がいいので是非使ってみてください(今更) 

 

.csvを作らずにDataTableを作成する

上記では.csvをインポートし、それをDataTableとして扱いましたが、

次はUE4上でDataTableを作成したいと思います。

 

まずは構造体を作ります。

f:id:MozPaca:20161124185138p:plain

 

DataTableを作成します。

コンテンツブラウザを右クリック→Miscellaneous(その他)→Data Tableを選択します。

f:id:MozPaca:20161124185148p:plain

 

DataTableを作成すると構造体を選択する画面が出現しますので、

先ほど作成したStruct2を選択し、OKボタンを押します。

f:id:MozPaca:20161124185158p:plain

 

DataTableにも名前を付け、

このようにします。

f:id:MozPaca:20161124185206p:plain

 

構造体を開き、パラメータ作成します。

f:id:MozPaca:20161124185216p:plain

 

次にDataTableを開き

パラメータを付けるものを作成していきます。

f:id:MozPaca:20161124185228p:plain

 

+ボタンから要素を追加し、

パラメータの数値を変更します。

f:id:MozPaca:20161124185300p:plain

 

後は先ほどのFunctionLibraryと同じ要領で使用できます。

 

このようにcsvが無くてもData Tableを作成することができます。