今回はUnityでデータをセーブする方法を書いていきます。

まず、セーブ方法には下記の4点が挙げられます。

2.Json Serialization
3.Binary Serialization
4.Database


今回は2.Json Serializationについて書いていきます。

1のPlayerPrefsを使うので、その辺りも知りたければこちらで解説しているのでどうぞ。

JSONシリアライズって何

JSONシリアライズは、データをコンピューターで扱いやすいJSON形式に変換することです。JSON形式とは、一般的にキーと値のペアで表すデータのフォーマットです。

UnityAPIのJsonUtilityクラスを使用して、JSONのシリアライズとデシリアライズが簡単に行えます。

このJsonUtilityを使うことで、
・クラスをJSON文字列化→文字列を保存
・JSON文字列をロード→JSON文字列をクラスに変換
といった風に、色んなデータ型をクラスに入れて、そのクラスをセーブしたり取り出したりできます。

ソースの記述方法

では実際にソースベースで使い方を解説します。

データクラスの作成

まずは保存したいクラスを作成しましょう。
保存したいクラスには[System.Serializable]を使います。
今回は仮に以下のデータを保存したいとします。

[System.Serializable]
public class PlayerData
{
    public string playerName;
    public int level;
}

クラスをJSON文字列に変換(シリアライズ)

JsonUtility.ToJsonメソッドを使用して、データクラスのインスタンスをJSON文字列に変換します。

PlayerData playerData = new PlayerData();
// データの値をセット
playerData.playerName = "John";
playerData.level = 5;

// クラスをJSON文字列に変換
string jsonString = JsonUtility.ToJson(playerData);
// JSON文字列を保存
PlayerPrefs.SetString("SAVE_DATA", jsonString);
この段階でjsonStringには、データクラスの内容がJSON文字列として格納されています。

JSON文字列をクラスに変換(デシリアライズ)

JsonUtility.FromJsonメソッドを使用して、JSON文字列をデータクラスのインスタンスに変換します。

// JSON文字列をロードする
string jsonString = PlayerPrefs.GetString("SAVE_DATA");
// JSON文字列をクラスに変換
PlayerData loadedPlayerData = JsonUtility.FromJson<PlayerData>(jsonString);
loadedPlayerDataには、JSON文字列からデシリアライズされたデータクラスのインスタンスが格納されます。

ちなみにセーブしたデータは、
Edit>Clear All PlayerPrefsで消すことができます。