🙄

[Unity] 自作クラスを要素とした配列をJsonに保存する

2022/03/16に公開約1,800字

[Unity] 自作クラスを要素とした配列をJsonに保存する

行いたいこと

・UnityでRPGの作成をするにあたり、ゲーム情報(PlayerStatusや保持アイテム等)を外部ファイルで保管したい。
・Excelに入力した情報をJsonファイルに置き換え、Jsonファイル内の情報をUnityに読み込みたい。(後日追記)

参考サイト

下記1つ目のサイトの「成功するコード」を参考に実装しました。
しかし、私の場合、なぜか上手くいかなかったので、2つ目のサイトも参考にして修正しました。

https://soft-rime.com/post-4238/
https://teratail.com/questions/210321

ソースコード

上述した参考サイトに倣って、私自身もコーディングしてみたので、何かの一助になると幸いです。

test1.cs

test1.cs
using System.IO;
using UnityEngine;

// Jsonに出力する配列
// 配列は、UnityのJsonUtirityで直接管理できないため、配列をクラスのメンバーとして使用する。
[System.Serializable]
public class SaveData
{
    public MainItemData[] item;
}

// 配列の要素としてのクラス
[System.Serializable]
public class MainItemData
{
    public float x;
    public float y;
}

public class test1 : MonoBehaviour
{
    void Start()
    {
        SaveData save = new SaveData();     // SaveDataクラスをインスタンス化
        save.item = new MainItemData[2];    // SaveDataクラスのitem配列を要素数2でインスタンス化
        save.item[0] = new MainItemData();  // save.item[0]にMainItemDataクラスを格納する。
        save.item[0].x = 1;                 // save.item[0]であるMainItemDataクラスのx、yにそれぞれ値を代入する。
        save.item[0].y = 1;
        save.item[1] = new MainItemData();
        save.item[1].x = 2;
        save.item[1].y = 2;
	
        // Assets/Json/test.json (新規or上書きしたいJsonファイルのパスを指定する。)
        string filePath = Application.dataPath + "/Json/test.json";

        string json = JsonUtility.ToJson(save, true);
        StreamWriter streamWriter = new StreamWriter(filePath);
        streamWriter.Write(json);       // writer.WriteLine(json);でもOK
        streamWriter.Flush();
        streamWriter.Close();
    }
}

test.json

test.json
{
    "item": [
        {
            "x": 1.0,
            "y": 1.0
        },
        {
            "x": 2.0,
            "y": 2.0
        },
    ]
}

Discussion

ログインするとコメントできます