🙄

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

2022/03/16に公開
1

[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

丹波の虎丹波の虎

jsonで保存する内容が、とても参考にないました。ありがとうございました。ところで、保存したファイルから逆に読み込む手順をこれから書かれるとありましたが、もう配信されましたでしょうか。もし、すでに配信されていたら、参考にしたいと思いますので、お知らせくださいませんか。よろしくお願いいたします。