BLOGブログ

2021.10.06UE4その他

[UE4]データテーブルとデータアセットのテキスト化

執筆バージョン: Unreal Engine 4.27

こんにちは。エンジニアの森です。

今回は、 UE4 上のデータテーブルとデータアセットを、テキスト出力する手法について考えます。

データテーブルを CSV エクスポートする

UE4 のデータテーブルは CSV 形式と Json 形式でのエクスポート/インポートをサポートしています。
また、データテーブルの右クリックメニューから「Export as CSV」が用意されているので、これを使えば、データテーブルのエクスポートはできます。
でも、データテーブルを手動でエクスポートするのって、面倒ですよね?
できれば自動でエクスポートを行う機能が欲しいです。
というわけで早速作っていきます。

データテーブルを CSV テキスト化して出力するために、実際に行うことは以下の 3 ステップです。

1. テキスト保存先をあらかじめ決めておく
2. データテーブルを CSV テキスト化
3. FFileHelper::SaveStringToFile を使用してテキストファイルを出力

出力先フォルダはプロジェクト設定で決められるようにして、出力ファイル名はアセット名と同じにしておけば良いでしょう。
データテーブルから CSV テキストへの変換は、 UDataTable::GetTableAsCSV を使用します。
独自のプロジェクト設定を追加する方法はこちらの記事(UDeveloperSettingsでプロジェクト設定に項目を追加する)を参照。
データテーブルの編集時には FTableRowBase::OnDataTableChanged が呼ばれますので、実装には UBlueprintFunctionLibrary を使うとすると、以下のようになります。

自動でエクスポートする様子

自動エクスポート機能ができました。

データアセットを Json エクスポートする

データアセットについての過去記事はこちら↓
独自に用意したデータアセットをより便利に活用する方法

データテーブルと同じように、データアセットもエクスポートをサポートしたいです。
しかし、データテーブルと違って UDataTable::GetTableAsCSV のような便利メソッドは存在しません。
標準の Json モジュールと JsonUtilities モジュールを使用すれば Json テキスト化が可能になります。
FJsonObjectConverter::UStructToJsonObject でデータアセットを JsonObject に変換し、シリアライズする、という流れです。
それ以外のステップは、データテーブルのときと同じ。
ただし、データテーブルと区別するためにファイル拡張子は .myjson にしておきます

自動でエクスポートする様子

自動エクスポート機能ができました。

Json をインポートしてデータアセット化する

さて、データアセットをエクスポートできたのですが、今度はインポートもできるようにしたいと思います。
インポートを実装する際には、こちらの記事(独自のアセットを実装する方法(2) インポートの実装)が参考になります。
MyDataTable にコードを書き加えて、試してみましょう。

これで、インポートができるようになりました。

メニューから「Reimport」が選べるようになった

自動エクスポートには事故もつきものですので、導入には慎重な判断が必要ですが、やってみる価値はあると思います。

ソースコードが多くなってしまったので、制作物をこちらからダウンロードできるようにしておきます。
UE4.27.0 です。

ありがとうございました。