Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

Unityスクリプト内でJSONを出力 (JSON.Net for Unity)

UnityのJsonUtilityはもともと入っていて事前準備不要だが,機能が限られている様子.特に,入れ子を実現するのが面倒だったので,代わりにJSON.Net for Unityを使ってみた.

実装の流れは以下の通り.

  1. クラスを用意
    • クラスの入れ子構造がそのままJSON入れ子になる
    • クラス内の変数名も反映される
  2. クラスのインスタンス
  3. JsonConvert.SerializeObject()を使ってインスタンスシリアライズ
    • 尚,UnityデフォルトのJsonUtilityだとDictionary形式を扱えなかったり何かと不便
  4. ファイル出力
using Newtonsoft.Json;

public class View
{
    public int width;
    public int height;
}

public class JsonData
{
    public Dictionary<string, View> multiview;
}

public void SaveJsonData()
{
    ret = new JsonData();

    var view_0 = View()
    {
        width = 512,
        height = 512
    };

    ret.multiview.Add("view_0", view_0);

    var view_1 = View()
    {
        width = 640,
        height = 480
    };

    ret.multiview.Add("view_1", view_1);

    var jsonStr = JsonConvert.SerializeObject(ret, Formatting.Indented);
    var writer = new StreamWriter("example.json", false);
    writer.Write(jsonStr);
    writer.Close();
}

上記のJsonDataの構造がそのまま以下のようなJSONファイルに反映される.

{
  "multiview": {
    "view_0": {
      "width": 512,
      "height": 512,
    },
    "view_1": {
      "width": 640,
      "height": 480,
    }
}