Jsonを気軽に読み書きしたい!
UnrealEngine5にJsonをブループリントから気軽に読み書きするプラグインがエンジンに組み込まれました。5.0時点ではBeta版となっており、今後APIの大幅な変更は予定されませんが安定面などの面で使用には注意が必要というステータスです。
Jsonはソースコントロールによるマージが可能なため、複数の開発者が同時に変更しても(コンフリクトに気を付ければ)問題が無く、気軽な運用ができることに大きなメリットがあると個人的に思います。
有効化
デフォルトではプラグインは無効化されているのでメインメニュー > Edit > Plugin を開いて有効化します。
ノードたち
Jsonファイルのセーブロード、Json文字列からのロードと文字列への出力、フィールドへの読み書きのノードがあります。
使用例
サンプルJson
以下のようなJsonファイルをContent/Json以下に配置します。
JsonUtilityLibrary
{
"name" : "IamJson",
"value" : 123,
"array" : [
"index 0 in array",
"index 1 in array",
"index 2 in array"
],
"map" : {
"first" : 1.2,
"second" : 1.75,
"third" : -0.001
}
}
ブループリントでの利用例
まずはロードするときに与えるパスについて注意点があります。
直接相対パスで記述した場合、FPlatformProcess::BaseDir()からの相対パスとなります。エディタでは [エンジンのルート]/Engine/Binaries/Win64/
となりプロジェクト側からでは使いにくいので ProjectContentDirやProjectDirなどからの相対パスを作成して渡すことをお勧めします。
またもう一つ重要な点としてJson中の配列へのアクセスを行うことが出来ません。例えば前述のsample.jsonではarray以下を読み取ることはできません。ご注意ください。
(辞書形式(map|連想配列)であれば読み取れるのでこちらで代用などを検討してください。)
パフォーマンスについて
非常に気軽に利用できるプラグインですが、Jsonの構造をロードするときに細かく大量のメモリアロケーションを行うためパフォーマンス面ではあまり効率的ではありません。巨大なJsonを読んだり、ランタイム中にフレームレートを維持したままデータを読み取りたいといったニーズにはあまり適しません。
そういったニーズでは rapidjsonなどの高速かつ省メモリなパーサーを活用することをお勧めします。