Easy SaveはUnityのゲームデータを保存するのに利用できる非常に強力なツールです。前回はシーン内のオブジェクトを自動保存するAuto Saveの基本をご紹介しました。ここでは自分で作成したスクリプトをAuto Saveの対象にする方法をご紹介したいと思います。
Auto Save機能を有効にする
まずはAuto Saveを行うための準備。すでにプロジェクトを用意している場合はご自身のプロジェクト・プログラムを利用してください。
Unityプロジェクトを準備する
プロジェクトは2D/3Dなんでも構いません。私の方では先日利用したいい感じのHPゲージを作成したものを使ってAuto Saveしたいと思います。
ここにHPゲージのリンクを追加する
Auto Save対象のスクリプトはHealthGauge.csですね。
スクリプトですが、Startメソッドを次のように変更してください。こちらの対応を行わないと、オートセーブしても1に戻してしまうため効果を実感できません。
public class HealthGauge : MonoBehaviour
{
// 他の部分は省略してます
// Startメソッドのみ変更
private void Start()
{
SetGauge(currentRate);
}
}
プロジェクトにEasy Saveを導入
ご自身のプロジェクトを用意できたら、Easy Saveのアセットを導入し、対象のシーンでAuto Saveが利用できる様にセットアップを行ってください。Auto Saveを使うまでの方法に関してはこちらのリンクをご参照ください
自分のスクリプトをオートセーブ対象にする
オートセーブ対象にするのはかなり簡単です。が、実際の運用では少し注意が必要になるのでそのあたりも含めて解説していきます。
現在のHPをオートセーブで復元する
私の方のプロジェクトでは現在のHPであるcurrentRateという変数を自動保存の対象にしたいと思います。
- Easy Saveのウインドを開く
- Tools>Easy Save 3>Auto Saveを選択
- 保存したいコンポーネントにチェックを入れる
- 私の場合だと、Sceneタブの中からHealthGaugeにチェックを入れる
- チェックを入れると、青い丸の歯車マークを選択
- コンポーネントから、保存したい変数のみ選択する
- 保存に必要ないものが多い場合は、Select Noneを押してから必要な変数のみチェックを入れる
- このウインドに直接来たい場合は[Typesタブを選択して、左側にある設定を行いたいコンポーネントを選ぶ]
動かして確認してみる
では実際に確認してみたいと思います。Loadが行われるのはAwakeで、ゲージを復元するのはStartで行われます。最初は1から始まり、2回小突いて0.6まで減らします。その後再起動すると0.6から再開されたのが確認出来ると思います。
オートセーブ機能の問題点と課題
さーて、なんとなくいい感じに動いた気がしますが、実際に利用する場合はいくつかの注意点が必要です。
- オートセーブで戻されるのは数値のみ
- currentRateは戻りますが、Awake以外のタイミングでロードが発生する使い方をする場合、ロードされたタイミングでSetGaugeが呼ばれるわけではないので、ゲージの表示は更新されません
- 別のフラグを持たせて、表示を更新するためのパラメータなどが必要
- オートセーブは各シーンごとに行われ、デフォルトでは保存タイミングが終了したシーン
- 現在一つのシーンなので気になりませんが、複数のシーンをまたぐ場合、異なるシーンに移動した際はセーブが行われるのはアプリを終了したシーンのみ
- シーンを切り替えるタイミングで保存を行うなど、任意でのセーブ機能が必要になります
コメント