アプリのセーブデータのフォーマットに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"]}