はじめに
ゲームデータをセーブしたりロードすることで、ゲームを閉じて再開したときにデータを引き継ぐことができます。GDevelopには標準でストレージという機能が備わっており、簡単にデータの保存と読み込みができます。
今回も、プロジェクトファイルの配布とサンプルプレビューを公開していますので、実際にさわってみて挙動をご確認ください。
1:単体の変数のセーブ/ロード
まず最初に、ハイスコアなどを格納したグローバル変数をストレージに保存/読み込みする方法をご紹介します。
セーブを実行したい状況でなんらかの条件を設定し、アクションでグローバル変数をストレージに保存します。
そして、保存後にかならず「ストレージを閉じる」を実行します。
あらかじめメモリーをロードすることで、データ保存をスムーズに行います。
保存後に「ストレージを閉じる」を実行することで、開きっぱなしになったメモリーを閉じ、パフォーマンスへ影響を与えないようにします。
次は保存したデータを読み込みます。
グローバル変数をストレージに保存はできますが、仕様上、ストレージから読み込んだ値を直接グローバル変数に保存できません。
ですので、一時保存場所としてシーン変数を使います。
2:インベントリを一括でセーブ/ロード
つぎは、インベントリの状況を保存して読み込みます。まず、アイテムを獲得するとインベントリにアイテムを追加するイベントを作成します。
インベントリについてはこちらの記事をごらんください。 GDevelopに標準機能としてインベントリがあり、アイテム管理が簡単にできます。
さらに、アイテムの所持数や装備の有無などインベントリの情報をそのまま一括でシーン変数に保存できます。
このとき、インベントリの情報は構造体としてシーン変数に保存されます。
構造体をストレージに保存するときは、値としてではなくJSON形式の文字列として保存します。
これで、インベントリの状態が一括でストレージに保存されます。
ストレージに保存されたインベントリの情報を読み込むときは、逆にJSON形式のテキストを構造体の変数に変換して格納します。
まず、JSON形式の文字列を一時的に格納するテキストの変数に保存します。
次は、JSON形式の文字列を格納した変数をインベントリのシーン変数に保存します
最後に、インベントリの情報をシーン変数から読み込みます。
3:構造体を一括でセーブ/ロード
保存する項目が多い場合、ひとつずつ保存するのは手間もかかりますし行数も多くなります。ですので、構造体の変数を使って一括で保存と読み込みをおこないます。
まずプロジェクトマネージャーから構造体のグローバル変数を用意します。
これをテキストとしてストレージに保存しますが、そのまま保存するのではなくJSON形式に変換して保存します。
そうすれば、構造体の子要素すべてを一括で保存できます。
そうすれば、構造体の子要素すべてを一括で保存できます。
ですので、一時的にJSONをテキストとして格納するためのシーン変数を用意します。
サンプルプレビュー
5:サンプルプロジェクトファイル
改変、コピー、ほかのプロジェクトへの組み込みなどご自由にご利用ください。
おわりに
データのセーブとロードはゲームに欠かせない機能だといえるでしょう。もしわかりにくい箇所がございましたら、コメント欄からお気軽にご質問ください。
さいごまでお読みいただきありがとうございました。
とんでもなく丁寧な解説でビックリしました。参考にさせていただきます!
返信削除そう仰っていただけて励みになります!
返信削除ありがとうございます。
今後ともよろしくおねがいます。