Unity Bolt Tips6. BoltでJson.netを使う
Bolt でサーバ上のJsonを取得してParseしたのでその方法のメモ。
Jsonシリアライザの選定
UnityでJsonフォーマットを読み込む場合、標準では UnityEngine.JsonUtility が用意されています。
ただし、JsonUtilityは
など、制約があります。
今回は、上記の制約がない、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 |
---|---|
追加項目 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として読み込みます。
2. Jsonを読み込む
その出力を JsonCovertでデシリアライズすることで値を取り出すことができます。
- Consoleの出力
3. UnityWebRequestを利用してサーバからJsonを受け取る
UnityWebRequestを利用してサーバ上のJsonを取得する場合は以下のように記述すれば利用可能です。
- Getでリクエストしています。
- わかりやすいように、エラーハンドリング等かなり簡略化しています。
以上。