途中保存できるSRPGセーブ機能|中断・再開が簡単にできる実装手順

シミュレーションゲームの作り方

SRPGのセーブ機能は、プレイヤーの利便性を大きく向上させます。

戦闘途中でも保存できれば、安心してプレイできます。

この記事では、実装方法を詳しく解説します。

この記事でわかること

  • セーブデータの構造設計
  • JSON形式での保存・読み込み
  • バイナリ形式での保存・読み込み
  • 戦闘途中の状態保存
  • 実装例とコード
ゲーム開発講師
ゲーム開発講師

セーブ機能は、最初から設計しておくことが大切です。後から追加すると、既存のデータ構造を変更する必要があります。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

セーブデータの構造設計

srpg-save-system-001

セーブデータの構造を最初に決めます。

実装方法を紹介します。

セーブデータクラス

このデータ構造で、ゲームの状態を保存できます。

ユニットの位置・HP・状態など、すべての情報を含めます。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

JSON形式での保存・読み込み

srpg-save-system-002

JSON形式は、読みやすくデバッグしやすいです。

実装方法を紹介します。

JSON保存の実装

JSON読み込みの実装

このコードで、JSON形式での保存・読み込みが実装できます。

人間が読める形式のため、デバッグしやすいです。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

バイナリ形式での保存・読み込み

srpg-save-system-003

バイナリ形式は、ファイルサイズが小さく、読み込みが速いです。

実装方法を紹介します。

バイナリ保存の実装

⚠️ 注意:BinaryFormatterの使用について

  • Unity 2021.2以降では、BinaryFormatterが非推奨です
  • 代わりに、JSON形式や独自のバイナリ形式を使用することを推奨します
  • セキュリティ上の理由から、信頼できないデータの読み込みは避けましょう

バイナリ形式は、ファイルサイズが小さく、読み込みが速いです。

ただし、デバッグが難しいため、開発中はJSON形式がおすすめです。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

戦闘途中の状態保存

srpg-save-system-004

戦闘途中の状態を保存するには、すべての情報を含める必要があります。

実装方法を紹介します。

戦闘状態の保存

このコードで、戦闘途中の状態を保存できます。

ターン情報、選択中のユニット、行動履歴などを含めます。

状態の復元

保存した状態を復元します。

戦闘を中断した位置から、再開できます。

ゲーム開発講師
ゲーム開発講師

セーブ機能は、最初から設計しておくことが大切です。後から追加すると、既存のデータ構造を変更する必要があります。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

実装例:完全なセーブシステムと形式の選び方

srpg-save-system-005

セーブ機能を実装する際、多くの開発者が「JSONとバイナリ、結局どちらを使うべきか」という壁にぶつかります。

ここでは、それぞれの特性を理解した上での使い分けと、実戦でそのまま使える統合的な実装例を紹介します。

JSON形式とバイナリ形式の使い分け基準

セーブデータの保存形式にはそれぞれメリットとデメリットがあります。

プロジェクトのフェーズや目的に合わせて、最適な方を選択しましょう。

  • 開発効率を優先するならJSON
    テキスト形式で中身が読めるため、デバッグが非常に容易です。「セーブしたはずのHPが反映されていない」といったトラブル時も、ファイルを直接開いて確認できるため、開発初期から中盤にかけてはJSON形式を強くおすすめします。
  • パフォーマンスと秘匿性を優先するならバイナリ
    ファイルサイズが小さく、読み込み速度に優れています。また、メモ帳などで簡単に書き換えられないため、リリース後にプレイヤーによるデータの改ざん(チート行為)を少しでも防ぎたい場合に有効です。

結論として、「開発中はJSONでデバッグし、リリース直前に必要に応じてバイナリへ移行する」という流れが、最も効率的でバグを出しにくい賢い選択と言えるでしょう。

実戦向け:完全なセーブシステムの実装

以下に、保存・読み込み・削除・存在確認のすべてを網羅した「完全なセーブシステム」のコードを示します。

今回は汎用性が高く、デバッグもしやすいJSON形式をベースにした実装例です。

スロット管理機能も備えているため、SRPGによくある「複数のセーブデータ」にも即座に対応可能です。

このスクリプトを一つ用意しておくだけで、SRPGにおけるセーブ・ロードの基本機能はほぼ網羅できます。

まずはJSON形式で確実にデータを保存・復元できる仕組みを整え、デバッグの効率を最大化させましょう。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

よくある質問(FAQ)

srpg-save-system-006

Q: JSONとバイナリ、どちらを使えばいいですか?
A: 開発中はJSON、リリース版はバイナリがおすすめです。JSONはデバッグしやすく、バイナリはファイルサイズが小さく読み込みが速いです。
Q: セーブファイルの保存場所はどこですか?
A: Application.persistentDataPathに保存されます。Windowsでは「AppData\LocalLow\会社名\プロジェクト名」、Macでは「Library/Application Support/会社名/プロジェクト名」です。
Q: セーブデータの互換性はどう保てばいいですか?
A: バージョン番号を追加しましょう。セーブデータにバージョン番号を含め、読み込み時にバージョンをチェックします。古いバージョンの場合は、変換処理を実行します。
Q: セーブデータが壊れた場合、どう対処すればいいですか?
A: エラーハンドリングを追加しましょう。JSONのパースに失敗した場合、デフォルトの状態に戻すか、エラーメッセージを表示します。また、定期的にバックアップを取ることも有効です。
Q: 複数のセーブスロットをどう管理すればいいですか?
A: スロット番号で管理しましょう。1〜10のスロットを用意し、各スロットに独立したセーブデータを保存します。UIでスロットを選択できるようにします。
ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

まとめ

srpg-save-system-007

セーブ機能は、最初から設計しておくことが大切です。

JSON形式から始めて、必要に応じてバイナリ形式に変更しましょう。

今日から始める3ステップ

  • ステップ1:セーブデータの構造を定義する(所要1時間)
  • ステップ2:JSON形式での保存・読み込みを実装する(所要2時間)
  • ステップ3:戦闘状態の保存・復元を実装する(所要3時間)

本格的にUnityを学びたい方は、Unity入門の森で実践的なスキルを身につけましょう。

あなたのペースで、少しずつ進めていけば大丈夫です。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

コメント

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