littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Unity Bolt Tips6. BoltでJson.netを使う

Bolt Tips 連続記事です

前回の続き

Bolt でサーバ上のJsonを取得してParseしたのでその方法のメモ。

Jsonリアライザの選定

UnityでJsonフォーマットを読み込む場合、標準では UnityEngine.JsonUtility が用意されています。

ただし、JsonUtilityは

  1. root要素がリスト型の構造は取り扱えない。
  2. シリアライズ/デシリアライズのためには事前にC#でクラス定義しておく必要がある。

など、制約があります。

今回は、上記の制約がない、Json.Net(Newtonsoft.json)を利用します。

Newtonsoft.jsonであれば、C#のクラス定義が不要で、Boltのノードだけで完結することができます。

ただ、デメリットとしては処理速度が遅いようで、大量のデータを読み取る場合や頻繁にデータを更新する場合は JsonUtilityを使ったほうが良いかもしれません。

こちらの比較記事が参考になります。


Newtonsoft.jsonを扱うための準備

1. Newtonsoft.json のインポート

Newtonsoft.json は標準ではUnityには付属していません。そのため外部ライブラリとして取り込んでおく必要があります。

こちらの記事を参考にDLLをインポートします。

また、IL2CPPビルドの際にランタイム上でエラーが出る場合もあるので、link.xmlの調整が必要になる場合もあります。

2. Boltのセットアップ

また、Bolt環境で、Newtonsoft.jsonを利用しようとすると、初期設定のままでは利用できません。(右クリックでノードが出てこない)

Tools > Bolt > Setup Wizard でNewtonsoft.jsonが利用できるように設定を行う必要があります。

Assembly Options Type Options
f:id:pigshape:20210228131512p:plain f:id:pigshape:20210228131648p:plain
追加項目
Newtonsoft.json
追加項目
JsonCovert
Jobject
JArray
System.DateTime (日付を扱う場合)

実際にJsonを読み込んでみる

1. ローカルのテキストファイルを読み込む

ここまで準備できたら、テキストファイルとして保存されたJsonファイルを、Boltを利用して読み込んでみます。

Test.json

[
  {
    "key1": "value1",
    "key2": 0.1,
    "key3": 1,
    "datetime": "2021-02-18T02:31:57.000000Z"
  },
  {
    "key1": "value2",
    "key2": 0.2,
    "key3": 2,
    "datetime": "2021-02-18T02:31:57.000000Z"
  }
]

Resourcesフォルダに、Test.jsonファイルを配置してそれをstringとして読み込みます。

f:id:pigshape:20210228134442p:plain

2. Jsonを読み込む

その出力を JsonCovertでデシリアライズすることで値を取り出すことができます。 f:id:pigshape:20210228134807p:plain

  • Consoleの出力 f:id:pigshape:20210228134917p:plain

3. UnityWebRequestを利用してサーバからJsonを受け取る

UnityWebRequestを利用してサーバ上のJsonを取得する場合は以下のように記述すれば利用可能です。

  • Getでリクエストしています。
  • わかりやすいように、エラーハンドリング等かなり簡略化しています。

f:id:pigshape:20210228135534p:plain

以上。