スポンサーリンク

【Unity】EasySaveのロードとセーブの処理速度を速くする方法

Unity

Unity Version 2021.3.11f1(LTS)

EasySaveのCacheモードを使う

using UnityEngine;

public class SaveManager : MonoBehaviour
{
    private int _stageLevel = 0;        //ステージの進行度(サンプル)
    private int _playerLevel = 0;       //プレイヤーのレベル(サンプル)

    private Vector3 _lastPlayPosition;  //最後にプレイしていた場所(サンプル)

    //キャッシュにファイルを作成するための設定を作成
    private ES3Settings _settings = new ES3Settings(ES3.Location.Cache);


    //キャッシュを用いたロード
    public void Load()
    {
        //ファイルが存在しているか
        if (ES3.FileExists())
        {
            ES3.CacheFile();    //キャッシュに既存のファイルをロードする
        }

        _stageLevel = ES3.Load<int>("StageLevel", defaultValue: 1, _settings);
        _playerLevel = ES3.Load<int>("PlayerLevel", defaultValue: 1, _settings);

        _lastPlayPosition = ES3.Load<Vector3>("LastPlayPosition", defaultValue: new Vector3(), _settings);
    }

    //キャッシュを用いたセーブ
    public void Save()
    {
        //_settingsの設定で一時的にキャッシュにデータを保存する
        ES3.Save<int>("StageLevel", _stageLevel, _settings);
        ES3.Save<int>("PlayerLevel", _playerLevel, _settings);
        ES3.Save<Vector3>("LastPlayPosition", _lastPlayPosition, _settings);

        ES3.StoreCachedFile();  //キャッシュにセーブしたデータを一括でファイルに保存する
    }
}

このコードでは、EasySaveアセットを使って、データのロードとセーブを行っています。

加えて、データのやり取りにCache(キャッシュ)を使うことで、処理のパフォーマンス(処理速度)を高めています!

ロード

//キャッシュにファイルを作成するための設定を作成
private ES3Settings _settings = new ES3Settings(ES3.Location.Cache);

まずは、ロードとセーブ処理のモードを、Cacheに設定するために、設定クラスの変数を作成します。

//キャッシュを用いたロード
public void Load()
{
    //ファイルが存在しているか
    if (ES3.FileExists())
    {
        ES3.CacheFile();    //キャッシュに既存のファイルをロードする
    }

    _stageLevel = ES3.Load<int>("StageLevel", defaultValue: 1, _settings);
    _playerLevel = ES3.Load<int>("PlayerLevel", defaultValue: 1, _settings);

    _lastPlayPosition = ES3.Load<Vector3>("LastPlayPosition", defaultValue: new Vector3(), _settings);
}

ロードの処理では、セーブデータのファイルを、キャッシュにあらかじめロードしておくことで、ファイルへアクセスする回数を最小限にしています。

各要素をロードする際に、Load関数の第三引数に、設定クラスを渡す必要があります。
//ファイルが存在しているか
if (ES3.FileExists())
{
    ES3.CacheFile();    //キャッシュに既存のファイルをロードする
}

この処理では、過去のセーブデータが存在しているかを判断して、存在していたらキャッシュにファイルをロードしています。

ファイルのパスは、EasySaveの設定にあるDefault File Pathに設定されています。
(画像はデフォルトの設定)

セーブ

//キャッシュを用いたセーブ
public void Save()
{
    //_settingsの設定で一時的にキャッシュにデータを保存する
    ES3.Save<int>("StageLevel", _stageLevel, _settings);
    ES3.Save<int>("PlayerLevel", _playerLevel, _settings);
    ES3.Save<Vector3>("LastPlayPosition", _lastPlayPosition, _settings);

    ES3.StoreCachedFile();  //キャッシュにセーブしたデータを一括でファイルに保存する
}

セーブの処理では、一旦キャッシュにデータを保存しておき、最後にまとめてファイルに書き込むことで、こちらでもファイルへの書き込み回数を最小限にしています。

まとめ

今回はEasySaveの処理速度を早くする方法を紹介しました。

簡単に、データのロードとセーブができて便利だけど、ゲームがカクついてしまう、という時に今回の記事が少しでも参考になれば幸いです!

お疲れさまでした!

参考にしたサイト

Improving Performance - Easy Save for Unity
...

EasySaveの機能を詳しく知りたい方はこちらの公式サイトをチェックしてみてください!

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