これちのPost-it

技術ネタをペラペラと

Unityでアプリを終了させてもデータを残しておく2つの方法

作りたいもの

例えばゲームのMaxスコアを保存したり、フレンドのリストをローカルに保存しておきたい場合があるとします。
それらのデータはアプリを終了して消えてしまったら当然困るので、アプリ終了時にデータをスマートフォン上に保存する必要があります。
その処理を今回紹介したいと思います。

データをローカルに保存する2つの方法

xmlファイルを使う方法

保存したいデータが以下のようなとあるクラスのインスタンス変数の中身だとします。

public class SaveData {
    [XmlElement("text")]
    public string m_text;
    [XmlElement("position")]
    public Vector3 m_pos;
}

これらをxmlファイルに保存する方法は以下のようにします。

// 保存したいデータのインスタンスのリスト
private List<SaveData> m_saveData;

// xmlファイルに入れるためのデータを作成
List<SaveData > xmlDataList = new List<SaveData > ();
foreach (SaveData data in m_saveData) {
    SaveData temp = new SaveData();
    temp.m_text = data.m_text;
    temp.m_pos = data.m_pos;
    xmlDataList.Add (temp);
}
string fileName = "korechi_memo";
string path = Application.persistentDataPath + "/" + fileName + ".xml";
// XmlSerializerのインスタンスを生成
var serializer = new XmlSerializer (typeof(List<SaveData>));
// ファイル生成
using (var stream = new FileStream (path, FileMode.Create)) {
    serializer.Serialize (stream, xmlDataList);
}

そして保存したxmlファイルをロードする方法を以下に示します。

string fileName = "korechi_memo";
string path = Application.persistentDataPath + "/" + fileName + ".xml";

var serializer = new XmlSerializer(typeof(List<PostItData>));
var stream = new FileStream(path, FileMode.Open);

List<SaveData> xmlDataList = serializer.Deserialize(stream) as List<SaveData>;

if (xmlDataList == null)
{
    Debug.Log("xmlDataList is null");
    return;
}

foreach (SaveData data in xmlDataList)
{
    // 取り出した後の処理
}

PlayerPrefsを使う方法

この方法は以前の記事で紹介した korechipostit.hatenablog.com
下の方にかかれています。その時使ったコードを載せておきますのでうまいこと参考にしていただければと思います。