データのセーブとロード

アプリのセーブデータのフォーマットにPlayerPrefはなるべく使わないほうがよいので、Json形式で保存する方法を採った。

セーブデータのフォーマットクラス「SaveData」と、保存クラス「SaveManager」を作成する。セーブデータは文字列の配列としている。

このコードでは
location = {“San Francisco”, “Tokyo”, “New York”}
の3つの都市名の配列を保存することにする。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;

//
// セーブデータクラス
//
[Serializable]
public class SaveData
{
    public string[] location;
}

//
// 保存と読み込みのクラス
//
public class SaveManager : MonoBehaviour
{
    string filePath;
    public SaveData saveData;

    private void Awake()
    {
#if UNITY_EDITOR
        filePath = "Assets/savedata.json";
        // プロジェクトフォルダ直下にファイルが保存される
#else
        filePath = Application.persistentDataPath + "/" + ".savedata.json";
#endif
        saveData = new SaveData();
    }

    //
    // データのロード
    //
    public void Load()
    {
        if(File.Exists(filePath))
        {
            StreamReader streamReader;
            streamReader = new StreamReader(filePath);
            string data = streamReader.ReadToEnd();
            streamReader.Close();
            saveData = JsonUtility.FromJson<SaveData>(data);

            Debug.Log("SaveManager:: Load");
        }
    }

    //
    // データのセーブ
    //
    public void Save()
    {
        string json = JsonUtility.ToJson(saveData);
        StreamWriter streamWriter = new StreamWriter(filePath);
        streamWriter.Write(json);
        streamWriter.Flush();
        streamWriter.Close();

        Debug.Log("SaveManager:: Saved");
    }
}

Assetフォルダに保存されたJsonファイルはこのようになる。

{"location":["San Francisco","Tokyo","New York"]}
タイトルとURLをコピーしました