Unity ノベルゲームの作り方14 選択肢によるシナリオ分岐・進行をセーブデータ付きで管理する | Unity入門の森 ゲームの作り方

Unity ノベルゲームの作り方14 選択肢によるシナリオ分岐・進行をセーブデータ付きで管理する

Unity ノベルゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この記事はUnityを用いた「恋愛・ホラー風ノベルゲーム」の作り方講座の第14回です。

前回は文字装飾機能をノベルゲームの会話システムに実装しました。

前回の記事:

Unity ノベルゲームの作り方13 TextMeshProの装飾機能を会話文に反映させる
この記事は「恋愛・ホラー風ノベルゲーム」の作り方講座の第13回です。 前回でスプレッドシートのデータを読み込んで会話処理ができるシステムを構築しました。 前回の記事: 今回は会話データを読み込む際に文字色の変更、太字での強調、文字の大きさ変...

今回はセーブデータをJSON形式で作成してセーブ・ロードするセーブデータシステムを作成します。

そして作ったセーブデータシステムとここまでに作成してきた選択肢付き会話システムによるシナリオ分岐をセーブ・ロード機能を用いて管理します。


【Line登録者限定のプレゼントもあるよ!】

ノベルゲームのセーブデータの作り方 シナリオ進行をJSON形式で管理する

次にセーブデータに触れておきたいと思います。

ゲームでは何かしらデータを保管しておく必要が出てきます。

そういったデータを保管する方法はいくつかありますが、今回はよく使われるJSONデータでのセーブデータを簡単に作成してみましょう。

JSONとは

ファイル形式の一つで「ファイル名.json」というファイル名になります。

JSONとはJavaScript Object Notationの略です。 JavaScriptというプログラミング言語におけるオブジェクトの書き方を参考に作られたデータフォーマット(データの記述形式)のことです。

ですが、一定の決まりをもった文字列なので手書きで編集したりもできます。

セーブデータの作成

ではまずはセーブデータになるクラスを作成します。

新しく「SaveData.cs」というスクリプトを「Assets/AppMain/99_Common/」フォルダ内に作成しましょう。

とても簡単で「Start()」や「Update()」も必要なく、「MonoBehaviour」の継承も必要ありません。

「storyNumber」という「int」の変数と、テスト用に「testString」という「string」の変数を用意しておきます。

今回のノベルゲーム講座ではストーリー進行度だけで管理できてしまうのでとてもシンプルなデータになっています。本格的なノベルゲームを開発する際は登場人物の親密度ステータスなどもセーブデータに含めたくなるかもしれませんね。

セーブデータ→JSONの変換

まずはこのデータをJSONにして確認してみます。

どこでも構わないのですがGameシーンを開いている状態であるという前提で(開いてなかったら開きましょう)、「GameView.cs」に処理を追加します。 

「Start()」関数に追加します。

あくまでテスト用なので後で消します。

まず「data」という変数に「new SaveData()」で新しく「SaveData」を作成します。

その「data」の「StoryNumber」を「100」、「TestString」を「書き換え」と変更します。

次が重要です。

JsonUtility.ToJson(データ) : データをJsonに変換する。

この関数を使用してJsonを作成します。

その返り値を「json」という変数で受け取ります。この時「json」は「string」です。

最後にその「json」をログで出しておきましょう。

ではGameシーンを実行してログを見てみます。

これが結果です。わかりにくいので改行を入れて整形してみます。

この形がJsonデータの基本形です。(JSONは改行を入れても値には影響しません)

一番外側は「{  }」で囲みます。囲まれた部分が一つのデータとなります。

そして値の変数名は「”  “」で囲まれます。なので変数名は「”StoryNumber”」と「”TestString”」です。

値との間には「 : 」があります。

その次に値であるintの「100」やstringの「”書き換え”」が書かれています。

変数の区切りは「 , 」です。

そしてこの値は文字列なのでこのまま文字列のファイル「.json」ファイルとして出力ができます。当然メモ帳などで開けます。

JSON→データ

次にJSONの値をデータに変換するテストをしておきましょう。

追加したのは最後の2行だけです。 

JsonUtility.FromJson<型名>( 文字列 ) : 文字列のJSONを「型名」に変換。

この関数を使用することで、JSONの文字列を型名に変換します。ログを見るとたしかにjsonデータが型名データに変わっています。

テストはここまでになります。「Start()」関数内の処理は削除しておきましょう。

データのセーブ処理とロード処理の作成

これからセーブデータのロード、セーブ処理を作成しますが、これをどのように扱うかによって作成する場所が変わってきます。

今回はあくまで機能を紹介する程度にとどめますので今あるスクリプトに追加する形にしますが、実際にゲームを作成する際にはシングルトンなどを活用してどこからでも利用できるようにすることも考えるといいでしょう。

シングルトンを用いてセーブデータシステムを開発した関連記事:

Unity タクティクス戦略SRPGの作り方16 周回レベルアップとシーン間でのデータ引継ぎ
この記事はUnityとC#で作るターン制のタクティクス戦略シミュレーションRPGプログラミング開発講座の第16回です。今回が講座内容としては最終回になります。 前回の記事でキャラクターの特技スキルを実装し、バフやデバフ・回復や強力な攻撃スキ...
Unity 2Dアクションの作り方14 ステージセレクト・タイトル・データの受け渡し・効果音・HP回復アイテムの実装
この記事はロックマン風2D横スクロールアクションゲームの作り方講座の第14回です。 前回はプレイヤーキャラの特殊武器の実装を行いました。個性豊かな7種類の追加武器を実装できました。 前回の記事: 今回はステージセレクトやボス撃破後の特殊武器...
Unity ローグライクカードバトルゲームの作り方21 セーブシステム・BGM・SEの実装とビルド方法を解説
この記事はUnityでハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」を作る講座の第21回です。 前回はダンジョンの無限階層化、デッキ補充システム、そして手札を捨てる処理を実装し、やり込みプレイに対応できるようにシステムを改...

 

それではセーブシステムを作成していきます。 

今回はどのシーンでも継承される作りになっている「ViewBase.cs」に処理を追加しておきます。

ここであればどこかのViewからなら特に意識もせず使用できます。

セーブシステム用ファイルチェック処理の実装

まずはセーブ、ロードの一環として、セーブシステム用のファイル・フォルダがあるかどうかのチェックを行い、なければ新しく作成する処理を実装します。 

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

これで簡易的ではありますが、選択肢を選んだ後に再度実行した場合に選択肢の後から処理が再生されるようになりました。

↑UnityエディタでHomeシーンから再生した場合にちゃんとゲームの途中から開始されていることがわかります。

(追記) Homeにセーブデータをリセットする処理を追加する

データがセーブされると次に再生するとき以降最初からゲームを開始できなくなってしまうので、データをリセットする処理を作成しておきましょう。

まずはHomeにボタンを作成します。

「ゲーム開始」ボタンをコピーして、

に移動します。

中のテキストを「セーブデータリセット」に変更し、FontSizeを「40」に変更します。

「HomeView.cs」に処理を追加します。 

「OnSavedataResetButtonClicked()」関数を追加します。

まず「var data = Load();」でデータをロードします。

「HomeView」は「ViewBase」を継承していますので、「Load()」関数を使用できます。

その後、読み込んだ「data」の値「StoryNumber」を初期値「0」に、「TestString」を「””」(空欄)に変更します。

「TestString」の初期値は「テスト」でしたが、この値に意味はないので空欄にしてしまって大丈夫です。

そして書き換えが終わったら「Save( data );」を実行してデータをセーブし初期化の完了です。

では、作成したボタンにこの関数をはめておきましょう。

できたら、一度セーブするところまで会話をすすめて一度Homeに戻ってリセットしてまた最初から実行できることを確認しておきましょう。

最後に

ここまでで今回のノベルゲームの作り方講座は終了になります。

UI遷移処理や会話処理やシナリオ分岐はノベルゲームやテキストタイプのアドベンチャーゲーム等に限らずどんなゲームにでも使われるものです。

ぜひ今回の講座内容をオリジナルゲーム開発に活用していただけたら嬉しいです。

最後に、ここまでの講座の内容を実装したプロジェクトファイルのダウンロードページを用意したので必要に応じてご利用ください。

Unity ノベルゲームの作り方15 ここまでのプロジェクトファイルデータ
前回の記事でノベルゲームの作り方講座は終了していますが、講座最終回のプロジェクトファイルをダウンロードできるようにしておきます。 前回の記事: また、講座内でも何度か途中までの開発プロジェクトファイルをダウンロードできるようにしてあります。...

Unity ノベルゲームの作り方講座へ戻る >>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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