TIPS:ゲームデータのセーブとロード

2024年2月1日木曜日

Features GDevelop TIPS

X f B! P L

はじめに

 ゲームデータをセーブしたりロードすることで、ゲームを閉じて再開したときにデータを引き継ぐことができます。

GDevelopには標準でストレージという機能が備わっており、簡単にデータの保存と読み込みができます。

今回も、プロジェクトファイルの配布とサンプルプレビューを公開していますので、実際にさわってみて挙動をご確認ください。

1:単体の変数のセーブ/ロード

まず最初に、ハイスコアなどを格納したグローバル変数をストレージに保存/読み込みする方法をご紹介します。

セーブを実行したい状況でなんらかの条件を設定し、アクションでグローバル変数をストレージに保存します。

このとき、先に「メモリーにストレージをロードする」というアクションを実行します。
そして、保存後にかならず「ストレージを閉じる」を実行します
あらかじめメモリーをロードすることで、データ保存をスムーズに行います。
保存後に「ストレージを閉じる」を実行することで、開きっぱなしになったメモリーを閉じ、パフォーマンスへ影響を与えないようにします。

次は保存したデータを読み込みます。
グローバル変数をストレージに保存はできますが、仕様上、ストレージから読み込んだ値を直接グローバル変数に保存できません。
ですので、一時保存場所としてシーン変数を使います。


そのあとで、データを保存したシーン変数をグローバル変数に代入します。

2:インベントリを一括でセーブ/ロード

つぎは、インベントリの状況を保存して読み込みます。
まず、アイテムを獲得するとインベントリにアイテムを追加するイベントを作成します。
インベントリについてはこちらの記事をごらんください。
Inventory(在庫)によってアイテムを管理する

Inventory(在庫)によってアイテムを管理する

はじめに 前回、アンケートのコメント欄から配列と高速ループについてのリクエストをいただきました。 その際に、インベントリによるアイテム管理のできるプラットフォーマーゲームもご希望なさっておられたので、今回はできる限り簡単にインベントリを実装する手順をご紹介いたします。

GDevelopに標準機能としてインベントリがあり、アイテム管理が簡単にできます。
さらに、アイテムの所持数や装備の有無などインベントリの情報をそのまま一括でシーン変数に保存できます。

このとき、インベントリの情報は構造体としてシーン変数に保存されます。
構造体をストレージに保存するときは、値としてではなくJSON形式の文字列として保存します。



これで、インベントリの状態が一括でストレージに保存されます。
ストレージに保存されたインベントリの情報を読み込むときは、逆にJSON形式のテキストを構造体の変数に変換して格納します。
まず、JSON形式の文字列を一時的に格納するテキストの変数に保存します。

次は、JSON形式の文字列を格納した変数をインベントリのシーン変数に保存します

最後に、インベントリの情報をシーン変数から読み込みます。

3:構造体を一括でセーブ/ロード

保存する項目が多い場合、ひとつずつ保存するのは手間もかかりますし行数も多くなります。
ですので、構造体の変数を使って一括で保存と読み込みをおこないます。
まずプロジェクトマネージャーから構造体のグローバル変数を用意します。
こちらのグローバル変数は「Status」という名前にしました。

これをテキストとしてストレージに保存しますが、そのまま保存するのではなくJSON形式に変換して保存します。
そうすれば、構造体の子要素すべてを一括で保存できます。

次に読み込みですが、仕様上ストレージのデータを直接グローバル変数に読み込めません。
ですので、一時的にJSONをテキストとして格納するためのシーン変数を用意します。

つづいて、JSONを格納したシーン変数をグローバル変数に保存します。


手順としては下記のとおりです。
  1. グローバル変数をJSONに変換してストレージに保存
  2. ストレージにJSON形式で保存されたデータをシーン変数に格納
  3. JSONが格納されたシーン変数をグローバル変数に保存
ストレージに保存したグローバル変数の読み込みには、一度シーン変数を経由するのがポイントです。

4:サンプルオンラインプレビュー

視覚的にわかりやすくするためのサンプルをご用意しました。

セーブしてからプレビューを閉じ、プレビュー再開時にロードすればストレージに保存されたデータを読み込みます。

サンプルプレビュー

5:サンプルプロジェクトファイル


上記のサンプルゲームのプロジェクトファイルです。
改変、コピー、ほかのプロジェクトへの組み込みなどご自由にご利用ください。

おわりに

データのセーブとロードはゲームに欠かせない機能だといえるでしょう。
もしわかりにくい箇所がございましたら、コメント欄からお気軽にご質問ください。
さいごまでお読みいただきありがとうございました。

最後までお読みいただきありがとうございました😆
もしよろしければ下記のボタンから応援よろしくお願いします🙇



こちらの記事はいかがでしたか?
ぜひご評価をおねがいします🙏

プロフィール


My name is Cratier.
I'm an indie game developer.


Read more...

このブログを検索

Translate

UPDATE

最新コメント

人気の投稿

アーカイブ

リンク元ランキング

カテゴリー

アンケート



Q.クレイティアのGD覚書でお気に入りのコンテンツはどれですか?

チュートリアル
TIPS
RTA Develop
雑記
That's談
その他


Q.あなたのGDvelop使用歴はどれくらいですか?

1ヶ月未満
半年未満
1年未満
1年以上
2年以上
3年以上
4年以上
5年以上

オープンチャット

LINEアカウント

ご連絡フォーム、またはLINEから お問い合わせ、ご要望、ご指摘など、お気軽にご連絡くださいませ。

ご連絡

名前

メール *

メッセージ *

💗雑談CHAT💗
お気軽にお話しください🐹
同時接続人数:

もしよろしければ下記のボタンから応援よろしくお願いします🙇




QooQ