【unity】ゲーム開発の記録Vol.17【名も無きゲーム開発】

はじめに

ゲーム制作の進捗ブログの第17回となります。

全てのステージやムービー関連も実装し、そろそろテストプレイも行いたいので、
セーブ機能やキーコンフィグの機能を実装しました。
この辺りの機能は早い段階で実装してもいいのかもしれませんが、制作中に仕様が変わったりすることもあり後回しにしていました。

今回はセーブ機能の実装についてのブログとなります。
最後までお付き合いいただければ幸いです。

「CorgiEngine(コーギーエンジン)」
自分はUnityを始めた頃から利用しているアセットなのでこれなしでは開発ができません。

ソースコードを分析することで勉強にもなっています。
2Dアクションをつくるなら超絶おすすめです!!

前回のブログは↓こちらです

※初回のブログは↓こちらです

セーブ機能の実装

最初にセーブの機能や仕様について以下の様に考えました。

・スロットは3つ。個別に削除できる。
・セーブするデータはステージクリア情報やアイテム、キーコンフィグなどの設定情報など。
・セーブするタイミングはステージクリアのタイミング。オートセーブ。
・できれば暗号化したい。
・スロットにはクリアしたエリア名を表示したい。

よくある簡単なセーブ機能です。
今回のゲームのデータはプレイヤー情報のほとんどが、シングルトンのオブジェクト一つで管理しているので、そのオブジェクトさえセーブできれば問題ないはず。

セーブ機能について調査したところ、unityの標準機能そのままで実装するとする場合、「PlayerPrefs」を使う方法やJSON形式で保存する方法が多い様です。

保存したいデータは少ない方だと思ってましたが、数えてみると結構な数ありました。
また、今後アップデートの際に保存したいデータが増えたりする可能性もあるので、できればオブジェクト丸ごと保存したい。

というわけで、自作せず、アセットの力を借りることとしました。
Unityを使用している方にはお馴染みの様ですが「Easy Save」というアセットです。

このアセットは色々な型のデータを簡単にセーブ/ロードできるだけではなく、暗号化までできちゃいます。

使い方については、以下のブログや公式のドキュメントなど参考にさせていただきました。


個別変数のデータをセーブする方法については多くの情報が見つけられましたが、
自分のようにコンポーネントを丸ごとセーブするような使い方についてはあまり情報がなく少し苦労しました。

悩んだポイントとしては、以下の2点。

・データがシングルトンのため、インスペクターにオブジェクトをアタッチしてしまうと、シーンを跨ぐセーブができない。
・ロードする際に既存のオブジェクトに値を読み込みたい場合はLoadではなくLoadIntoを使用する。

気づくまで結構悩みました。気づいてしまえば当たり前…

コード自体はシンプルに特定のコンポーネントをスロットごとに分けたファイルにSaveして、LoadIntoでデータを読み込むだけなので非常にシンプル。
データの暗号化も設定すれば自動で暗号化されます。

万一、保存したいデータが増えたとしても、保存したいデータを同じオブジェクトで管理しいれば、変更する必要もないのでラクチンです。

実際にセーブ機能を実装してからキーコンフィグの機能を実装した際に、セーブデータが増えましたが何も変更する必要なくセーブできました。

とても便利なアセット。Unityの標準機能でも良い気がします。

最後に…

初めて制作したゲーム「DRAGON’S TOWER(ドラゴンズタワー)」はAppStore、Google Playにて、無料で配信中です。気になったら遊んで頂ければ幸いです!

「DRAGON’S TOWER(ドラゴンズタワー)」

Google Play で手に入れよう

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