Skip to content

CSV・JSONとデータ保存 ​

ゲームの表データにはCSV、設定やセーブにはJSONを使えます。Projectへ入れたTextAssetの読込と、ユーザーPCへ書き出すセーブデータは分けて考えます。

TextAssetを読む ​

C#の保存FieldへTextAssetを設定します。textで文字列、bytesでbyte列、dataSizeでサイズを取得できます。内容を外部から更新した場合は、必要な時点でReloadを呼びます。

csharp
[SerializeField] private TextAsset? table;

void Start() {
    // 設定したTextAssetをヘッダー付きCSVとして読み取る
    if (table == null) return;
    var csv = CsvUtility.Parse(table.text, hasHeader: true);
    Debug.Log(csv.rows.Count);
}

CSV ​

CsvUtilityは引用符付きのセル、区切り文字や改行を含む値を扱います。文字列を単純に,でSplitすると、引用符のあるデータを壊す場合があります。

先頭行を見出しとして扱う場合はhasHeader: trueにします。数値はTryGetInt32などで変換結果を確認し、未設定のセルや行数の不足も扱ってください。

JSON ​

JsonUtilityは保存対象のFieldをJSONへ変換します。通常のC#プロパティが、すべて自動で保存Fieldと同じ扱いになるとは限りません。

cs
using NEMEngine;
using System.IO;

public sealed class PlayerSaveData {

    public int score;
    public Vector3 position;
}

public sealed class SaveDataExample : MonoBehaviour {

    void Update() {
        // 保存・読込の失敗をGame Consoleへ通知
        try {
            if (Input.GetKeyDown(KeyCode.F5)) Save();
            if (Input.GetKeyDown(KeyCode.F9)) Load();
        } catch (Exception error) {
            Debug.LogWarning($"セーブデータを処理できません: {error.Message}");
        }
    }

    void Save() {
        // 保存したい値をゲーム用のデータへまとめる
        var data = new PlayerSaveData { score = 100, position = transform.position };
        // ユーザーの保存先へJSONを書き出す
        Directory.CreateDirectory(Application.persistentDataPath);
        string path = Path.Combine(Application.persistentDataPath, "save.json");
        File.WriteAllText(path, JsonUtility.ToJson(data));
    }

    void Load() {
        // 保存ファイルがある場合だけ復元
        string path = Path.Combine(Application.persistentDataPath, "save.json");
        if (!File.Exists(path)) return;
        var data = JsonUtility.FromJson<PlayerSaveData>(File.ReadAllText(path));
        transform.position = data.position;
    }
}

このScriptをGameObjectへ追加し、Play中にF5で保存、F9で読み込みます。保存後にGameObjectを移動してから読み込むと、保存時の位置へ戻ります。

FromJsonOverwriteは既存のデータへ指定項目を反映する操作です。保存形式を変える場合は、過去のファイルが足りない項目を持つ場合と、不正な型を持つ場合の両方を考慮します。

保存先 ​

ユーザーデータはApplication.persistentDataPathの下へ保存します。GameAssetsやEngine既定ファイルへセーブデータを書かないでください。フォルダー作成、権限、容量不足、壊れたJSONの例外を処理します。

この例はファイルI/Oのため、フレームごとに実行しません。大きなデータや頻繁な保存では、ゲームの更新を止めない実行方法と保存の完了を設計してください。

CsvUtility · JsonUtility · TextAsset

現行版マニュアル · 8ea58ba2 · 2026-10-28確認