【Unity】RPGを作るチュートリアルその82 フラグに関するデバッグ機能を追加

【Unity】RPGを作るチュートリアルその82 フラグに関するデバッグ機能を追加

シンプルなRPGをUnityで作るチュートリアルシリーズの82回目です。

第81回ではイベントの発生条件などで使用するフラグを管理するための機能を実装しました。

今回はゲームの実行中にフラグの状態を出力する機能、フラグの状態を切り替える機能を実装したいと思います。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。

 

チュートリアルの一覧

このシリーズ全体の一覧は以下のページにまとめています。

 

前回の内容

前回はイベントの発生条件などで使用するフラグを管理するための機能を実装しました。

 

フラグのデバッグ機能

前回の実装でゲームの実行中にフラグを管理する機能ができました。このままイベントの実装へ……とも思いましたが、ゲームの実行中にフラグの状態を確認できたり、フラグの値を変更できたりするとイベントの作成が捗るので、このタイミングでフラグのデバッグ用機能を実装したいと思います。

特にイベントの開始条件の確認はゲームの進行に合わせて確認すると結構大変なので、任意の値に設定して、ちゃんと意図したページのイベント内容になっているか確認できると実装が楽なんですよね。

とは言いつつ、ビルドした後のゲームで確認できる形ではなく、Unityエディタ上で動作させている時に確認できるようにするにとどめたいと思います。デバッグ用のUIを作るのも結構大変なので、まずは中身を確認できる部分だけ作ってコンソールでチェックする形式にします。チュートリアルの完成後に拡張機能として作るのはアリかもしれません。やりたいなーと思いつつ、そこまで手が回るかは今は考えないこととします(遠い目)

「BattleTester」や「StatusChanger」などのデバッグ用機能と同じように、Inspectorウィンドウからチェックボックスをクリックすることで、フラグの中身の取得やフラグの値変更ができるようにしていきます。

 

フラグのデバッグ機能の実装

Projectウィンドウから「Assets/Scripts/Debug」のフォルダを開き、MonoBehaviourのスクリプトファイルを作成します。名前は [FlagTester] にしました。

フラグを確認するクラス
フラグを確認するクラス

 

作成した「FlagTester」の中身は以下のように記載しました。

フラグの状態を保持している「FlagManager」への参照をフィールドとして保持するようにします。また、各機能についてはHeaderの属性で区切っています。

Update()ではフレームカウントが5になってから各動作が実施できるようにします。これはAddressablesのロードを待つためです。

OutputFlags()のメソッドではフラグの状態をコンソールに出力するようにします。デバッグ用に情報を確認するため、フラグ名や値を太字にするように<b>のタグを使っています。今回はフラグの数が少ないので1行ずつ出力するようにしていますが、規模が大きくなってきた場合はフラグの数も増えるため、OutputFlag()のメソッドでフラグ名を指定して出力する方法も用意しています。

規模が大きい場合はカテゴリごとにフラグ定義を分割するなどしておくと良いかもしれません。

SetFlagState()では指定したフラグの状態を変更します。手入力でフラグ名を入れるのは若干めんどくさい気もしますが、プルダウンにするとフラグ名が多い場合に探すのが大変になるのでこの形にしました。フラグ名の定義に含まれていない名前を指定するとリストに追加されますが、デバッグ用途なので存在しないフラグ名を指定するのも許容しています。

 

フラグの管理クラスの修正

デバッグ用に動作を確認していたところ、前回作成したフラグの管理クラスで修正すべき点を見つけてしまったので、こちらを修正させてください。修正したいのは以下の2点です。

  • [Serializable]の削除
  • フレームカウント確認の処理を修正

 

クラス名の前に[Serializable]の属性がついていたのを削除しました。それに伴い、Systemの名前空間のusingディレクティブも削除しました。

Update()では、フレーム数の確認を行う意図だったのですが、なぜか_flagStatesのカウント数を確認していたので、こちらも修正しました。きっと疲れていたんだと思います。

 

スクリプトのアタッチ

スクリプトを保存したらゲームオブジェクトにアタッチしていきます。

スクリプトをアタッチするためのゲームオブジェクトを作成します。Hierarchyウィンドウから「Managers」の下に空のゲームオブジェクトを作成します。名前は [FlagTester] にしました。

ゲームオブジェクトの作成
ゲームオブジェクトの作成

 

Inspectorウィンドウでは「FlagTester」のスクリプトをアタッチします。「FlagManager」についてもアサインしておきましょう。

スクリプトのアタッチとアサイン
スクリプトのアタッチとアサイン

 

動作確認

スクリプトをアタッチしたらゲームを実行して動作を確認します。ゲーム実行後、「FlagTester」のInspectorウィンドウで「Output All Flag States」のチェックボックスをクリックして、コンソールにフラグの状態が出力されることを確認します。

フラグの状態の出力
フラグの状態の出力

 

また、個別のフラグの状態を出力できること、指定したフラグの状態を変更できることを確認しておきましょう。

 

今回のブランチ

 

まとめ

今回はゲームの実行中にフラグの状態を出力する機能、フラグの状態を切り替える機能を実装しました。イベントの開始条件を確認する上ではゲームの実行中にフラグの状態を切り替えられると便利です。

次回はイベントのデータクラスを実装していきます。手戻りを防ぐためにイベント機能全体をある程度のところまで実装してからチュートリアルの形にしたいので、少し間が空くかもしれません。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!