この記事はUnreal Engine 4(UE4) Advent Calendar 2019の20日目の投稿記事です。
Unreal Engine 4 (UE4) Advent Calendar 2019 - Qiita
私がマーケットプレイスに公開しているObjectDelivererというプラグインがあります。
今回の記事はこのプラグインに実装している「オブジェクトをJsonにシリアライズする機能」について書きます。
例えばこんなVariablesを定義したブループリント(Objectを継承)があるとすると、
こんな感じのJson文字列に変換されます。
{ "IntValue":0, "BoolValue":false, "StringValue":"ABC" } Jsonは文字列で表現されるので、そのままテキストファイルに保存することもできます。 また文字列なので人間の目で見ても中身が分かりやすいです。
このJsonをオブジェクトに復元する機能も作ることで、Jsonを介してオブジェクトの保存-復元ができるようになるのです。
ObjectDelivererではこのJson文字列を通信に乗せて送受信することで、オブジェクトを別の場所(別のアプリケーション)に届けることができています。
UE4におけるJsonの取り扱い UE4には標準でJsonとJsonUtilitiesというモジュールがあります。
Jsonモジュール Jsonの読み書きをサポートするモジュールです。ただしブループリントでは使用できずC++のみサポートされています。
こんな感じで使えます。
Jsonオブジェクト→Json文字列 // FJsonObject(Jsonデータの入れ物)を作成 TSharedPtr<FJsonObject> jsonObject = MakeShareable(new FJsonObject()); // jsonObjectにプロパティを追加 // FStringにJsonを書き込むためのWriterを作成 FString OutputString; TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutputString); // JsonをFStringに書き込み FJsonSerializer::Serialize(jsonObject.ToSharedRef(), Writer); // OutputStringにJson文字列が入っているので何かする Json文字列→Jsonオブジェクト // json文字列が入っているFString FString jsonString; // FStringからJsonを読み込むためのReaderを作成 TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(jsonString); // FJsonObject(Jsonデータの入れ物)を作成 TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); // Json文字列からJsonオブジェクトに読み込み FJsonSerializer::Deserialize(JsonReader, JsonObject); // jsonObjectからプロパティを取り出して何かする Jsonオブジェクトの値のGet, Set TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); // 値のセット JsonObject->SetNumberField("IntValue", 1); JsonObject->SetBoolField("BoolValue", true); JsonObject->SetStringField("StringValue", "ABCDEFG"); // 値の取得 int32 intValue = JsonObject->GetIntegerField("IntValue"); bool boolValue = JsonObject->GetBoolField("BoolValue"); FString stringValue = JsonObject->GetStringField("StringValue"); // このほかArrayやObjectプロパティもGet, Setできます 上記パターンを知っていれば、だいたいのケースで対応できると思います。
...