条件は決まりましたので、続いて、この条件のロジックを組むためには、どんな情報が必要となるかを何かを考えていきます。
「Enemy タグを持つオブジェクトをすべて破壊したら」ということは「Enemy タグを持つオブジェクトがシーン内に0個になったら」と考えることが出来ます。
この条件を考えたとき、オブジェクトの情報を管理できていなければ条件式として組み立てることが出来ません。
つまり、ゲームシーン内に、Enemy というタグを持つオブジェクトが何個あるのかが分からなければ、この条件式は構築できないためです。
Enemy タグを持つオブジェクトに関しては、以前に作成した、StopAttackItem スクリプトが役に立つでしょう。
この処理内では、タグを持つ複数のオブジェクトを探して配列に代入するという処理がありますので、それを応用してください。
<応用する>
targets = GameObject.FindGameObjectsWithTag("EnemyShotShell");
今回は条件を満たしたらシーン遷移を行うことが目的ですので、この敵の数を取得する処理は、シーン遷移処理が記述されているスクリプトへ追記するといいでしょう。
例えば、TankHealth スクリプトには、ゲームオーバーシーンへの遷移処理が記述されているため、using にシーン遷移用の宣言が追加されているので、このスクリプトを利用しましょう。
オブジェクトの情報が取得できましたが、この情報は GameObject 型での取得になっています。
今回は何個あるのか、ということを数字として管理した方が管理しやすいので、この情報を元にして、敵の数を扱えるように新しく int 型の変数を用意します。
これも TankHealth スクリプトに宣言して用意しておきましょう。
Enemy タグで取得した GameObject 型の配列の情報は、配列の最大数を取得することで、そのまま「敵の残りの数」と読み替えることが出来るためです。
これを int 型の変数に代入して、敵の数を把握出来るようにします。
配列の長さの最大値は「Length」で取得出来ます。
あとは、この敵の数を、どのように管理をしていくかを考えていきます。
敵の数は、敵が破壊された際に減らしていくようにロジックを組めば、わかりやすく、処理がつくりやすいでしょう。
ここでは、以前に学習したブロック崩しのロジックが応用できます。
ブロック崩しでは、ブロックが破壊されるたびに、GameMaster スクリプトが管理している BoxNum の数を1つ減らしていく処理を実装していました。
これを上手く利用しましょう。
敵が破壊される処理は DestroyObjest スクリプト内に記述がありますので、ここに、ブロック崩しの Destroyer スクリプトを参考にしながら
敵の残数を減らしていく処理の追加を行います。
<ブロック崩しの Destroyer スクリプトを応用する>
masterObj.GetComponent<GameMaster>().boxNum--; <= これは、boxNum 変数が public 修飾子なので実行できます。
考え方としては、同じような変数の設計にするか、あるいは、TankHealth スクリプトに敵の数を減らすメソッドを用意して呼び出すようにするか、です。