*今回は、砲弾が生成された時点で、画面上で一番近い敵に向かって飛んでいく仕組みを作ります。
(スクリプト)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HommingMissile : MonoBehaviour { public float speed; private GameObject[] targets; private bool isSwitch = false; private GameObject closeEnemy; private void Start() { // タグを使って画面上の全ての敵の情報を取得 targets = GameObject.FindGameObjectsWithTag("Enemy"); // 「初期値」の設定 float closeDist = 1000; foreach (GameObject t in targets) { // コンソール画面での確認用コード print(Vector3.Distance(transform.position, t.transform.position)); // このオブジェクト(砲弾)と敵までの距離を計測 float tDist = Vector3.Distance(transform.position, t.transform.position); // もしも「初期値」よりも「計測した敵までの距離」の方が近いならば、 if(closeDist > tDist) { // 「closeDist」を「tDist(その敵までの距離)」に置き換える。 // これを繰り返すことで、一番近い敵を見つけ出すことができる。 closeDist = tDist; // 一番近い敵の情報をcloseEnemyという変数に格納する(★) closeEnemy = t; } } // 砲弾が生成されて0.5秒後に、一番近い敵に向かって移動を開始する。 Invoke("SwitchOn", 0.5f); } void Update() { if(isSwitch) { float step = speed * Time.deltaTime; // ★で得られたcloseEnemyを目的地として設定する。 transform.position = Vector3.MoveTowards(transform.position, closeEnemy.transform.position, step); } } void SwitchOn() { isSwitch = true; } }
(設定)
- スクリプトはプレハブ化した砲弾に追加する。
(結果)
- 設定が完了したらゲームを再生
- 砲弾を生成した時点で、一番近い敵に向かって飛んでいけば成功です。