i-school - 2Dタップシューティングゲーム 発展4
 無事に EnemyDataSO スクリプタブル・オブジェクトを活用した自動生成処理が実装できました。
この処理の中で未実装になっている、エネミーの攻撃力を利用して、拠点の耐久力の値を減算させる処理を実装します。

 以下の内容で順番に実装を進めていきます。


<実装動画 エネミーの攻撃力に応じて拠点の耐久力の値が減算される>
動画ファイルへのリンク


発展4 −エネミーのデータを外部のスクリプトで参照する処理の実装−
 7.DefenseBase スクリプトを修正して、EnemyData の攻撃力を参照して拠点の耐久力の値を減算する処理に変更する
 8.EnemyController スクリプトを修正し、不要な変数を削除する


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

 ・入れ子クラス(EnemyDataSO.EnemyData)を外部のクラスで利用する方法



7.DefenseBase スクリプトを修正して、EnemyData の攻撃力を参照して拠点の耐久力の値を減算する処理に変更する

1.設計


 EnemyController スクリプトに、EnemyDataSO スクリプタブル・オブジェクトからエネミーごとの EnemyData が届くようになりました。
この EnemyData クラスは、エネミー1体分のデータで構成されています。そのため、攻撃力の値も参照が可能になっていますので、
現在の固定の attackPower の参照して拠点の耐久力の値を減算する方式ではなく、エネミーごとに設定されている攻撃力の値を減算するように処理を変更します。

 耐久力の値を管理して計算処理を行っているのは DefenseBase スクリプトの UpdateDurability メソッド内にあります。
こちらの処理を変更して、エネミーごとの攻撃力の値分だけ減算出来るようにしましょう。


2.DefenseBase スクリプトを修正して、UIManager スクリプトに移行する処理と書き換える処理を追加する


 設計に基づいて、EnemyController スクリプトに追加されている EnemyDataSO.EnemyData クラスの情報を利用して、
エネミーの攻撃力分だけ拠点の耐久力の値を減算する処理に書き替えます。

 UpdateDurability メソッドには EnemyController の情報が引数で届いていますので、これをそのまま利用します。
EnemyDataSO.EnemyData クラスに設定されている power の値が攻撃力になります。
この情報は public 修飾子で宣言されている変数ですので、 EnemyDataSO.EnemyData クラスを扱えるスクリプトであれば
そのまま参照をすることが出来ます。

// EnemyController スクリプトの情報を代入する変数
EnemyControler enemy;

// EnemyController スクリプトの情報を利用して、EnemyDataSO.EnemyData クラスの情報から、power の値を参照する(ピリオドの処理を理解する)
enemy.enemyData.power;

 またエネミーごとの攻撃力の値を参照できているか確認するため、Debug.Log メソッドを利用して、
Console ビューにエネミーごとの攻撃力の値を表示するように処理を追加しておきます。


DefenseBase.cs

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


 スクリプトを修正したらセーブします。
新しく宣言した変数はありませんので、インスペクターは以前と変わりない状態で問題ありません。


DefenseBase ゲームオブジェクト インスペクター画像



 続いて、EnemyController スクリプトを修正します。


8.EnemyController スクリプトを修正し、不要な変数を削除する

1.設計


 DefenseBase スクリプトの耐久力の値を減算する処理を、EnemyController スクリプトの attackPower 変数から
EnemyController スクリプトで管理している EnemyDataSO.EnemyData クラスの持つ power の値に変更を行いました。

 この変更により、いままで利用していた attackPower 変数は不要になりましたので削除を行います。

 必要な情報が変化することに合わせて、処理も変更していきましょう。

 特にデータベースのような方式を利用して管理を行っていく場合、設計を行う際に最初からデータベースにすることを想定して処理を構築し、
不要になった変数やメソッドがあったら適切なタイミングで変更を行う必要が出てきます。

 いきなりすべての設計を考えることは難しいかもしれませんが、この値はこうした方が管理しやすいかも? という視点で考えてみてください。


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


 不要になった変数を削除しましょう。


EnemyController.cs


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



 Prefabs フォルダにある EnemySet ゲームオブジェクトのインスペクターを確認します。
不要な変数が削除されています。


EnemySet ゲームオブジェクト インスペクター画像



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


 実装が完了したらセーブをしてスクリプトの見直しを行い、問題がなければゲームを実行してください。

 いままでは EnemySet ゲームオブジェクトに設定していた attackPower の値だけ拠点の耐久力の値を減算していましたが、
今回の実装により、各エネミーの攻撃力を反映して、EnemyData の power の値だけ拠点の耐久力の値を減算するようになっています。

 異なるエネミーを拠点に侵入させて、それぞれの攻撃力分だけ耐久力が減算されるか確認しましょう。
画面上の値やゲージだけではなく、Debug.Log によって Console ビューにもエネミーの攻撃力が表示されるはずです。


<実行動画>
動画ファイルへのリンク


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

 次は 発展5 −Exp の設定追加と Exp 表示用のゲームオブジェクトの作成− です。