防衛用のキャラのゲームオブジェクトに攻撃範囲の情報を設定するように設計を考えます。
もっとも実装しやすい方法は、新しく子オブジェクトを1つ Create Empty で作成して、それにコライダーをアタッチすることです。
コライダーの判定方法にはスクリプトのメソッドを利用しますので、それに合わせて IsTrigger のスイッチを切り替えます。
タワーディフェンスでは敵キャラが経路に沿って移動を行いますので、
防衛用のキャラの攻撃範囲は、その経路をカバーする形状であることが理想です。
そのため、BoxCollider2D コンポーネントを利用して、広く、経路をカバーできる状態で作成しておきます。
敵キャラにも同じようにコライダーを追加することによって
コライダー同士の判定が行えるようになりますが、
敵キャラが攻撃範囲用のコライダーに侵入するためには、
攻撃範囲用の BoxCollider2D の IsTrigger のスイッチをオンにしておく必要があります。
そうしないと、敵キャラは侵入できず、見えない攻撃範囲用のコライダーに接触し、そこで移動を停止するようになってしまうためです。
以上のような設計をふまえて、防衛キャラ側には新しく CharaController スクリプトを1つ作成してアタッチします。
その中でトリガー型の判定が可能な OnTriggerStay2D メソッドを実装します。このメソッドはコライダーを持つゲームオブジェクトが、
コライダー内に侵入した際に、侵入している間ずっと自動的に処理を行うメソッドです。すべてのコライダーに反応するため、Tag による分岐を用意し、
敵キャラのコライダーのみを判定するようにします。
Tag による分岐が必要なのはなぜでしょうか?
例えば、防衛用のキャラが2体並んでいる場合、それぞれのコライダーに反応してしまい、誤作動を起こしてしまうためです。
それを回避するため、OnTriggerStay2D メソッドが実行された場合には、まず、Tag による判定を行う必要性があります。
OnTrigger 〜 で始まる名前のメソッドは、Rigidbody2D コンポーネントがアタッチされていないと動作しません。
そのため、防衛用のキャラのゲームオブジェクトには、Rigidbody2D コンポーネントを追加しておく必要があります。
これまでの設計をまとめます。
<Chara ゲームオブジェクト>
1.Chara ゲームオブジェクトに Rigidbody2D コンポーネントを追加する
2.Chara ゲームオブジェクトの子オブジェクトを1つ作成し、その子オブジェクトに BoxCollider2D コンポーネントを追加し、IsTrigger にチェックを入れる
3.CharaController スクリプトを作成し、OnTriggerStay2D メソッドを実装する
<Enemy ゲームオブジェクト>
4.Enemy の Tag を追加する。この情報で侵入したコライダーを持つゲームオブジェクトが敵キャラであると判定するため
5.Enemy ゲームオブジェクトに BoxCollider2D コンポーネントを追加する
それでは、1〜2の処理について最初に実装し、続いて、3〜5の処理を実装していきます。