今回は、セーブポイントを作成しEasySaveを使ってセーブとロード機能を実装したいと思います。
【EasySave】セーブポイントを作成してセーブ&ロードする
Easy Saveは、初心者でも簡単にセーブやロード機能を実装することが出来るアセットとしてお馴染みです。
自力で全て実装しようとするとなかなか大変な作業になることも多く、そんな時にEasySaveを利用している人も多いんではないでしょうか。
とても簡潔なコードを記述するだけで、セーブやロードを行うことが出来るのでとても優秀なアセットの1つです。
実装
EasySaveをインポートしたら、メニューバーのToolsにEasy Save 3が追加されます。
Settingsより様々な設定の変更が行えますが、今回はデフォルトのまま進めます。
私が開発している3Dアクションゲームを例にセーブとロード機能を実装していきます。
まずは、フィールド上にセーブポイントを作成します。このセーブポイントをプレイヤーが通過したらセーブを行うようにします。
セーブポイントのゲームオブジェクトは別アセットのエフェクトを利用しているので、判定は上のスクリプトのようにします。
単純に、タグで判定しプレイヤーと接触したら予め作成しておいたセーブパネルを開きます。セーブパネルにはテキストを作成して「セーブしました」と表示するようにしておきます。
最後に、コルーチンを使って3秒経過したらセーブパネルを閉じるようにします。
この辺は各々好きなように作りこんでもらえれば良いと思います。
EasySaveでは、intやtransformなど様々な型を保存することが出来ます。
作成しているゲームのジャンルによって保存するべき要素と保存する必要のない要素があると思いますが、今回はプレイヤーのHPと位置を保存したいと思います。
プレイヤーコントローラーにセーブとロードメソッドを記述しました。
セーブする際には「ES3.Save」メソッドを使用します。
PlayerHPがプレイヤーのHPを格納している変数です。PlayerHPを「PlayerHPKey」というKeyに保存します。transformも同じですね。
ロードする際には「ES3.Load」メソッドを使用します。セーブ時に保存しておいたKeyを指定するだけなので、とてもシンプルなコードとなります。
ただ、Transformの場合は「ES3.LoadInto」を指定しなければならないことに注意しておいてください。
私のように、スライダーを使用してHPを管理している場合にはスライダーにプレイヤーのHPを反映させることを忘れないようにします。
ロードメソッドの呼び出しは、敵に攻撃を受けてゲームオーバーになった際にリトライボタンを押した時に行います。
今回実装した内容を動画にしています。
分かりやすいように、一度敵に攻撃を受けた状態でセーブポイントに行きセーブしています。この状態で再び敵の攻撃を受けてわざとゲームオーバーにします。
ゲームオーバーパネルに用意しておいたリトライボタンをクリックすることで、セーブした状態に戻っていることが分かりますね。
ゲーム実行時にこのようなエラーが発生する場合には、メニューの「Assets」→「Easy Save3」→「Add Manager to Scene」を選択してEasy Save 3 Managerオブジェクトを作成してみてください。
私も、最初セーブポイントにアクセスした際に上のエラーが発生しましたが、この対処法にて問題なく実行することが出来ました。
EasySaveは、セーブやロードの他に暗号化等も出来るので非常にゲームを開発する上で重宝するアセットですので、興味がある場合は是非チェックしてみてください。