【Unity】iOSでセーブデータを読み書きする方法

unity

少し前にScriptableObjectの記事を書いた。

【Unity】ScriptableObjectの使い方

元々セーブ機能を作りたくて調べた上記の機能であるが、Unityエディタでは問題なく動くのに、実機だと動かない。

動かないというかアセットファイルの値を変更できないので、セーブができない。

ScriptableObjectから作られたアセットファイルの値はUnityエディタから変更できても、実機(iPhoneとかAndroidのスマホ、ゲーム機など)で実行された場合は変更できないんです。

https://ekulabo.com/about-scriptable-object

そこでどうしたかというと、StreamWriterや`StreamReader`を使って、Application.persistantDataPathにデータを読み書きすることにした。

ここならアプリがバージョンアップされてもデータは恒久的に残るらしい。

実装するに当たって、以下の記事がシンプルで分かりやすかったので参照した。

https://qiita.com/kengkong/items/3fe34ce5e1af89b2adb3

ScritableObjectを継承したデータ保存用クラスの代わりに、Serializeした別のデータ保存用クラスを作成し、以下のコードで読み書きするようにした。

    public void SaveMobileData(MobileData data)
    {
        StreamWriter writer;
        string jsonData = JsonUtility.ToJson(data);

        writer = new StreamWriter(Application.persistentDataPath + "/savedata.json", false);
        writer.Write(jsonData);
        writer.Flush();
        writer.Close();
    }

    public MobileData LoadMobileData()
    {
        string data = "";
        StreamReader reader;

        reader = new StreamReader(Application.persistentDataPath + "/savedata.json");
        data = reader.ReadToEnd();
        reader.Close();

        return JsonUtility.FromJson<MobileData>(data);
    }