本ページにはプロモーションが含まれます
PlaymakerUnity

【Unity】EasySave3を使ってみた

この記事は約3分で読めます。

はじめに

これまでは、ゲームデータの保存にPlayerPrefsを使って、リセットされても問題ない設定値やフラグを管理していました。ユーザーデータやゲームの進行データは、ScriptableObjectを経由してJSONで難読化して保存していました。

しかし、ゲームが拡張するにつれて、構造体の修正やテストに時間がかかるようになりました。「そもそも、こんなことに時間をかけたくない。自分の要件に合ったアセットはないかな?」と思っていたところ、以前購入したEasy Saveをほとんど使っていなかったことを思い出しました。Easy SaveにはPlaymakerのカスタムアクションも付いているので、自分のプロジェクトとの親和性が高そうだと思い、試してみることにしました。

使ってみた

ゲーム開始時に、ScriptableObjectにマスターデータや保存されたデータを読み込み、その値をゲームで使用します。つまり、ScriptableObjectに値が入っている状態で丸ごと保存して、次回読み込めれば良いわけです。

「ScriptableObjectを丸ごと保存する機能って、Unityの標準機能には最初から無かったっけ? Editorでの保存ならできたような気もする…」と思いながら、Easy Save 3のダイアログを操作してみました。

すると、ScriptableObjectの中身を自動で解析してくれて、保存対象を選べるようになりました。

Easy Saveの保存対象選択画面
Easy Saveの保存対象選択画面

GameObjectでも、スクリプトでも、何でも保存してくれるようです。

さらに、難読化までしてくれるとは驚きです。

Easy Saveの暗号化設定画面
Easy Saveの暗号化設定画面

難読化の効果がどの程度かは不明ですが、エミュレーターでのセーブデータ不正防止くらいにはなりそうです。

試しに、プレイヤーデータが入ったScriptableObjectを保存して、ゲーム起動時に読み込みを行うと… ちゃんとできています!

    private void OnApplicationQuit()
    {
        // アプリ終了時にリソースを解放する
        if (resourceManager != null)
        {
            resourceManager.ReleaseAllAssets();
        }
        // アプリ終了時にデータを保存する
        if (scriptReference != null)
        {
            RefObjectsActionSupport.getRefObjectSo();
            PlayerData playerDataSo = RefObjectsActionSupport.playerDataSo;
            ES3.Save<PlayerData>(debugSaveKey, playerDataSo);
        }
    }

上記のコードは、アプリ終了時にScriptableObjectのユーザーデータを丸ごと自動保存する処理です(Windows, Androidで動作確認済み)。非常に便利です。

おわりに

Easy Save 3無しではゲームが作れない体になってしまいました。

参考資料: