Unity Jsonファイルの読み込み
- 2021年4月22日
 - Unity
 
Unityでは「(アプリ名)/Assets/Resources」以下の階層に保存した設定ファイルをScriptから直接読み込むことが可能です。
今回は「(アプリ名)/Assets/Resources/json/jsonsample.json」に保存したjsonの設定ファイルを読み込む処理のサンプルをシェアしたいと思います。
読み込みをおこなうJsonのサンプル
{
  "productInfos": [
    {
      "id": 1,
      "name": "製品A",
      "pos": {
        "pos_x": -1.11,
        "pos_y": -1.12,
        "pos_z": -1.13
      }
    },
    {
      "id": 2,
      "name": "製品B",
      "pos": {
        "pos_x": -2.11,
        "pos_y": -2.12,
        "pos_z": -2.13
      }
    },
    {
      "id": 3,
      "name": "製品C",
      "pos": {
        "pos_x": -3.11,
        "pos_y": -3.12,
        "pos_z": -3.13
      }
    }
  ]
}
上記のJsonの読み込みをおこなうscriptを作成します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JsonData
{
    public ProductInfo[] productInfos;
}
[System.Serializable]
public class ProductInfo
{
    public int id;
    public string name;
    public Position pos;
}
[System.Serializable]
public class Position
{
    public float pos_x;
    public float pos_y;
    public float pos_z;
}
public class JsonReader : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        string loadjson = Resources.Load<TextAsset>("json/jsonsample").ToString();
        JsonData jsonData = new JsonData();
        JsonUtility.FromJsonOverwrite(loadjson, jsonData);
        foreach (var item in jsonData.productInfos)
        {
            Debug.Log("ID: " + item.id);
            Debug.Log("製品名: " + item.name);
            Debug.Log("x座標: " + item.pos.pos_x);
            Debug.Log("y座標: " + item.pos.pos_y);
            Debug.Log("z座標: " + item.pos.pos_z);
        }
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}
Jsonのデータ構造にあわせたclassの作成をおこないます。
この例の場合、JsonData、ProductInfo、Positionの各classが
Jsonのデータを保持するために設定したclassになります。
Jsonでのkey名とJsonのデータを保持するためのclass内変数名は
一致させておく必要があります。
Resourcesフォルダに保存したJsonは
Resources.Load(“json/jsonsample”).ToString();
でstringとして読み込むことが可能です。
JsonのStringをオブジェクトに変換するために以下のメソッドを使用しています。
JsonUtility.FromJsonOverwrite();
この処理をScene内のオブジェクトにアタッチして、アプリケーション起動時に
実行されるように設定します。
コンソールを確認すると以下のように読み込みがおこなわれていることが
 確認できました。

木曜日担当: nishida
nishida at 2021年04月22日 10:00:04