データ保存系のアセットでよくオススメされるEasySave3では、ゲーム内で作成されたプレファブなどのオブジェクトも復元することが出来ます。文字列でのデータ保存などは調べたらすぐ出てくると思うので、今回はゲーム内で生成されたプレファブや、位置をもとに戻すための処理を解説したいと思います。
機能をわかりやすくするために手動でセーブ・ロードを行う
プロジェクトの準備
オートセーブ機能を体感するためのプロジェクトを準備します。ここでは基本的にはどんなプロジェクトでも構いません。私の方ではパブリッシャーセールでGiftアセットとして入手したラーメン屋さんのアセットを使いたいと思います。
また、当然ですがEasySave3のアセットの導入も行ってください。

オートセーブ機能を無効化する
今回はプログラムでオートセーブとロードを実装します。実際のゲームで利用する時は、然るべきタイミングで行う必要がありますので、実装中の理解を深めるためだと思ってください。
- Tool>Easy Save 3>Auto Saveを選択
- 表示されたウインドから対象のシーンでAuto Saveを有効にする
- タブのAuto Saveを選択
- 「Enable Auto Save for this scene」ボタンを選択
- Auto Saveを無効化する
- Save Event:None
- Load Event:None



スクリプトでオートセーブ・ロードを行う
ここからがES3の実装になります。まずはスクリプトを作成します。このスクリプトは任意のタイミングでセーブとロードを行うためのスクリプトです。SaveSystemというスクリプトを作成して、次のプログラムを入力してください。
using UnityEngine;
public class SaveSystem : MonoBehaviour
{
public void QuickSave()
{
ES3AutoSaveMgr.Current.Save();
}
public void QuickLoad()
{
ES3AutoSaveMgr.Current.Load();
}
}
スクリプトの準備ができたらUIでボタンを2つ作成します。
- 空のGameObjectを作成
- 名前をSaveSystemに変更
- SaveSystemスクリプトをアタッチ
- セーブとロードボタンを作成
- UI>Buttonからボタンを作成
- 各ボタンの設定を行う(SaveButtonの場合)
- ButtonコンポーネントのOnClickにSaveSystemゲームオブジェクトをセット
- QuickSaveメソッドを呼び出し
- Loadボタンも同様にQuickLoadメソッドを呼び出せるようにしてください


これにてAutoSaveとLoadが任意のタイミングで行えるようになりました。
Auto Saveを実際に使ってみる
設定が完了したので、実際に使ってみましょう。ここでは食べ終わった丼を下げた状態を保存してみたいと思います。
食べ終わった丼をオートセーブ対象にする
オートセーブではシーン内に配置されているオブジェクト・コンポーネントに対して各パラメータを保存することができます。ただしこれは自分で指定を行う必要があります。これはすべてのオブジェクトを対象にした際、保存対象が多すぎた時に大きな遅延などが発生するためと考えられます。
私の方では空になった丼をオートセーブの対象とし、非表示状態を保存してみたいと思います。ゲームオブジェクトの名前を確認します。今回対象とするゲームオブジェクトの名前は「SM_bowl_empty」


- Tools>Easy Save>Auto Saveからウインドを開きます。
- Auto Saveタブ>Sceneを選択してください


- 制御したいゲームオブジェクトを見つける
- ヒエラルキーと同じゲームオブジェクトが表示されているので、制御を行いたいゲームオブジェクトを探します。
- 見つけづらい場合は検索ボックスにゲームオブジェクトの名前を選択してもOK
- ヒエラルキーで選択しているオブジェクトは太字になるので目安として使うのもあり
- 制御したいプロパティ・変数にチェックを入れる
- SM_bowl_empty
- active(表示・非表示に利用)
- SM_bowl_empty


実際にオートセーブ・ロードを行ってみる
下準備ができたらオートセーブを利用してみましょう。
- ゲームを動かす
- 対象のゲームオブジェクトを非アクティブに切り替える
- Saveボタンを押す
- ゲームを再起動
- この時点で対象のゲームオブジェクトが表示されているのを確認
- Loadボタンを押す
- 対象のゲームオブジェクトが非表示になる


オートセーブの別パターン
上記の設定方法とは異なる方法でも実装することができます。
対象のシーンでAutoSave機能を使えるようにする
選択中のシーンでAutoSave機能を使う場合、ヒエラルキーのコンテキストメニューからEasy Save>Add Manager to Sceneを選択することで利用可能になります。


選択後はシーン内に「Easy Save 3 Manager」というゲームオブジェクトが追加されます。インスペクターのSettingsボタンからエディタの設定に簡単にアクセスできるので有効活用してください。


再生・停止だけでオートセーブが機能するように戻す
ボタンを利用せず、アプリの開始・終了時に自動的に保存出来るように戻してみましょう。
- Tools>Easy Save>Auto Save
- Auto Saveタブを選択
- Save Event:On Application Quit
- Load Event:Awake


跳ねているCircleをオートセーブしてみる
2Dで跳ねるCircleを作成しました。名前はCircleのまま。3Dで行う場合はSphereで行っても大丈夫です。
- 2D Object>Circleを追加
- 当たり判定:CircleCollider2Dを追加
- 物理挙動:Rigidbody2Dを追加


ゲームを再生して跳ねているように高いところから落とすようにしてみてください。(実際には跳ねてなくても大丈夫ですが)
Auto Saveの設定を行う
今回オートセーブで再現したいものは、次の項目。各コンポーネントのプロパティを選択するのは歯車マークを押すことで選択出来ます。
- Circle (Transform)
- localPosition
- localRotation
- localScale
- Circle (Rigidbody 2D)
- velocity


Rigidbody2Dの方だけ設定画面載せておきます。速度を保存対象にしないと、AutoSaveから戻ったときに、毎回自然落下状態になるため必要。


この状態でUnityエディタを再生・停止をくり返してみると、最後の位置・最後の速度が復元されるようになります。
コメント
コメント一覧 (1件)
[…] EasySave3のオートセーブを使って、オブジェクトやプレファブを復元する[ES3… […]