【簡単】ゲームを再起動してもデータを残しておく方法(Android・iOS)

Unity

プレイヤーの体力やパワーなどのデータを、ゲームを再起動しても残しておきたいことがあります。その時に役に立つのがJsonUtilityです。

今回はこれを用いてデータの保存・読み込みを行いたいと思います。

Android・iOSとエディターで使用可能です。

はじめに

まずはProjectウィンドウでC#スクリプトを作成し、JsonDataと名付けます。

JsonDataを開き、以下のコードをコピペします。

using UnityEngine;
using System.IO;

public class JsonData
{
    public static void Save<T>(T o, string path)
    {
        string str = JsonUtility.ToJson(o);
        StreamWriter streamWriter = new StreamWriter(Application.persistentDataPath + "/" + path + ".json", false);
        streamWriter.Write(str);
        streamWriter.Flush();
        streamWriter.Close();

    }

    public static T Load<T>(string path)
    {
        StreamReader reader = new StreamReader(Application.persistentDataPath + "/" + path + ".json");
        string getone = reader.ReadToEnd();
        reader.Close();
        return JsonUtility.FromJson<T>(getone);
    }
}

これでデータを保存・読み込みの準備ができました。このスクリプトには二つの関数が含まれています。これらを呼び出すことでデータを保存したり読み込んだ入りします。

もうJsonDataは書き換えませんので、閉じてしまって構いません。

一つずつ解説します。(その前にデータを準備しましょう)

データの準備

まず、保存する変数を用意します。保存したい変数があるスクリプトもしくは、JsonDataとは異なるスクリプトを編集します。今回は、プレイヤーの情報を含んだInfoクラス、その中に、体力とパワーの整数値を入れています。

    [System.Serializable]
    public class Info
    {
        public int hp;
        public int power;
    }
    public Info info;

このinfoを保存することでhpとpowerをまとめて保存することができます。

これで準備は完了しました。

データの保存

データを保存するにはJsonData.Save()を使用します。

JsonData.Save(info, "pureiya-");

上の例では、info変数を保存していますが、その時にファイル名をpureiya-に設定しています。これはデータを読み込むときに必要な名前になります。

これでデータは無事保存されたと思います。

データの読み込み

データの保存ができたので、次はデータの読み込みを行いたいと思います。データの読み込みをするにはJsonData.Load<>()を使用します。

info = JsonData.Load<Info>("pureiya-");

これはinfoという変数に、読み込んだデータをぶち込んでいます。「データの保存」で決めた、”pureiya-“という名前をここで使用します。全く同じ名前でないと正しく読み込まれません。

中かっこ<>の中には、クラス名(ここでいうInfo)を記入してください。

まとめ

このように、JsonUtilityを用いれば簡単にデータの保存・読み込みが行えます。

ありがとうございました。

コメント

タイトルとURLをコピーしました