前書き
ゲームの進捗状況を保存するためにSaveを実装することはゲームとして基本的な機能になりますが、Unityの場合いろいろなSaveアセットが存在し、特にEasy Saveが有名でレビューも好評だと思います。
ただし、Easy Saveもそこそこいいお値段がするため導入に躊躇すると思いますが、TopDown Engineには基本機能でSave/Loadがすでに実装されています。とりあえずSave/Loadを使ってみたい場合にまずはTopDown EngineのSave/Load機能を動かしてみるのがいいと思います。
現在、TopDown EngineのSave/Loadシステムを使用してゲーム開発を行っていますが、特に問題なく使えているので大丈夫かなと思います。
やりたいこと
今回はTopDown EngineでのSave/Loadのやり方について説明していこうと思います。
正直、公式Documentを見てみてもどうやって実装するんだ?という状況だったので、自分なりに調べて実装した形で紹介していこうと思います。
Save/Loadのデモの場所
デフォルトだと以下の場所にあると思います。
TopDown Engine -> TherdParty -> MoreMountains -> MMTools -> MMSaveLoad
・MMSaveLoadTestScene
Save/Loadのデモの実行
以下の動画で簡単にSave/Loadのデモを実行しました。デモのやり方として以下になります。
- シーンを起動する
- テキストフィールドに文字列を設定する
- Saveボタンを押下する
- シーンを停止する
- 再度シーンを実行して、Loadボタンを押下する
- 入力したテキストがテキストフィールドに表示される。
デモの作り
デモ上にあるSave/LoadボタンはMMSaveLoadTesterコンポーネントにあるSave/Load関数を呼び出して使用しています。
MMSaveLoadTesterの実装を見てみると分かりますが、
- ブロックの先頭
- Save関数
- Load関数
- Reset関数
- 初期化処理
に分かれています。簡単に作りを書くと以下のようになります。
ブロックの先頭
ブロックの先頭では「Saveするファイル名」、「Saveしたファイルを格納するフォルダ」、「ファイルの形式」などを宣言しています。ファイル名やファイルの保存形式など変更することができますが、実際に保存ファイルが置かれるパスはソースにべた書きになっています。
Save関数
テキストフィールドで設定された文字列を取得します。ブロックの先頭で宣言した保存先のファイルに取得した文字列を用いて書き込みを行っています。
Load関数
ブロックの先頭で宣言した保存先からファイルを読み込み、読み込んだ結果をテキストフィールドに設定しています。
Reset関数
ブロックの先頭で宣言した保存先のフォルダを削除します。
初期化処理
保存するフォルダの形式を設定します。
ゲームに実装する方法について
基本的にはDemoにあるMMSaveLoadTesterコンポーネントを参考にすることでSave/Loadを実装することができます。
必要なことは「Saveしたときに保存ファイルに書き込む項目」と「Loadしたときに保存ファイルから読み込む項目」を追加するだけで新しく項目を保存することが可能です。
MMSaveLoadTesterコンポーネントのSave/Loadの実装を見るとSave/Loadする項目にtestObject.SavedTextが存在します。
新しく保存したい項目を追加する場合は、testObject.SavedTextで変数を宣言している場所と同じ場所(MMSaveLoadTesterの内部クラスMMSaveLoadTestObjectクラス)に、新しいメンバを宣言し、testObject.SavedTextと同じようにSaveボタン、Loadボタンを押下した時に値の設定、取得を行うことで保存先のファイルへSave/Loadができる作りになります。
具体的に「GamaManagerにあるPointsの値を保存したい」といった場合には、
- MMSaveLoadTesterの内部クラスMMSaveLoadGameSoftObjectのメンバにSavePointsを宣言する(変数名については任意の変数名でOKです)
- Save関数のなかでGamaManagerから取得したPointsをSavePointsに設定する
保存については上記の設定で終了です。Loadについても上記と同様にMMSaveLoadGameSoftObjectを使用して取得した値をGamaManagerのPointsに設定してあげることでLoadが完了します。
まとめ
今回はTopDown EngineのSave/Loadの方法について紹介をしました。
すでにDemoが存在しており、内部クラスに新しいメンバを追加するだけでSave/Loadができるため、ソースコードの修正が必要ですがとりあえず使いたいと思う場合はTopDown Engine付属のSave/Load機能を使えばいいかなと思います。
コメント