i-school - 2Dタワーディフェンス 発展6
 以下の内容で実装を進めていきます。

発展6 ーデバッグモード機能の実装ー
11.デバッグを効率化するためのデバッグモードを自作する



 新しい学習内容は、以下の通りです。

 ・デバッグ作業の効率化



11.デバッグを効率化するためのデバッグモードを自作する

1.設計


 ゲーム製作にはデバッグが不可欠です。その際に、デバッグにかかる手間や時間をなるべく短縮することができれば、作業効率が上がり、開発へ注力できる時間をより確保できます。

 多くの場合、各クラスにおいて、そのクラスに必要な情報が管理されていますが、そういったケースの場合、
デバッグを行って元の状態に戻す際に、各ゲームオブジェクトを1つずつ探して数値を変更する作業が必要になります。

 例えば、防衛拠点の耐久力を一時的に減らしておいて、ゲームオーバーのチェックを簡単にしたい、という場合であれば
防衛拠点用のゲームオブジェクトをヒエラルキーで探して、その中にアタッチされている DefenseBase 用のスクリプトの情報を操作し、
ゲームオーバーのチェックが終了したら、また値を元に戻す、という感じです。

 これが複数のゲームオブジェクトにまたがっている状態でチェックを行う必要がある場合、探したり操作する手間が増えていき、
結果、どれを操作したのかがわからなくなってしまったり、値を元に戻すのを忘れてしまったり、という人的なミスが発生しやすくなります。
特に一人で作業している場合にはよいのですが、複数人で作業を行っている際に値の戻し忘れがあったりすると致命的なエラーを引き起こしかねません。

 今回、このデバッグ作業の効率化を図るため、デバッグモードの機能を自作してみます。

 機能の実装方法としては、シングルトンで作成している GameData クラスに情報を集めてインスペクターからまとめて設定できるようにします。
また、デバッグモード用のスイッチを作成し、こちらもインスペクターから設定できるようにします。
ここで設定した情報に対して、各クラスでは、この GameData クラスにある情報を参照し、デバッグモードである場合には、GameData にある値を利用するようにロジックを作り変えます。

 このような設計にすることで、デバッグに利用したい情報を GameData クラスからすべて設定ができるようにします。
GameData のみを操作するだけで済むようになるため、元に戻す場合も、この GameData クラスのみをインスペクターから設定すれば済みます


2.GameData スクリプトを修正する


 まずは試しに、防衛拠点用の耐久力を GameData で設定し、インスペクターから変更出来るようにします。

 デバッグモード用のスイッチは、 bool 型で用意しておいて、こちらもインスペクターから切り替えられるようにしておきます。
この値にデバッグモードとしての役割を与えて、true の場合にはデバッグモードとして認識、false の場合にはデバッグモードではない、と認識させるような分岐を作るようにします。


GameData.cs

<= クリックすると開きます


 スクリプトを修正したらセーブを行います。


3.GameData ゲームオブジェクトの設定を行う


 ヒエラルキーにある GameData ゲームオブジェクトを選択して、インスペクターを確認します。
新しい変数が追加されていますので、インスペクターから設定を行います。


設定前のインスペクター画像




設定後のインスペクター画像



 以上で設定は完了です。あとは、この設定を防衛拠点用のスクリプトが反映できるように処理を追加します。


4.防衛拠点用のスクリプトを修正する


 手順16において防衛拠点用のスクリプトを自作されていると思いますので、こちらは参考用に提示しています。

 耐久力用の値をデバッグ用に用意していますので、GameData クラスの isDebug を分岐条件にして、自分でデバッグ用の処理のロジックを考えて実装に挑戦してみてください。

 条件に合致する場合、デバッグモードとして認識して、GameData に設定した耐久力の値を参照するようにします。


DefenseBase.cs

<= クリックすると開きます


 スクリプトを修正したらセーブを行います。


5.ゲームを実行して動作を確認する


 GameData クラスに耐久力の設定を行って、isDebug のチェックを入れて、デバッグモードとします。
 
 この状態でゲームを起動してください。DefenseBase クラスの maxDefenseBaseDurability の値が GameData クラスで設定した値になっていれば制御成功です。

 これで耐久力に関しては数値を少なくしたり、大きくしたりしてデバッグを行う際には、このデバッグモードを設定することにより、
GameData クラスから設定すれば DefenseBase クラスを直接操作しなくても設定が行える状態になりました。



 以上でこの手順は終了です。

 次は 発展7 ーマップデータ機能の実装− です。