現在、「指定した1つのオブジェクトに向かって弾を撃つ」スクリプトと「指定したタグを持つオブジェクトの中で一番近いものを見つける」スクリプトを拾ったので、どうにかくっつけて「指定したタグをもつオブジェクトの中で一番近いものに向かって弾を撃つ」スクリプトにしたいのですが、うまく組み合わせることができません。
以下の二つを組み合わせて使う方法、あるいは他の方法でも今回やりたいことが実現できる方法があれば教えてください。
####【指定した1つのオブジェクトに向かって弾を撃つ】
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LookAt_Pod : MonoBehaviour { public GameObject BulletPrefab; public float bulletSpeed; public float span = 1f; private int timeCount = 0; private GameObject targetObj; // 注視したいオブジェクト void Update() { this.transform.LookAt(targetObj.transform); timeCount += 1; if (timeCount > span) { timeCount = 0; // 敵の弾を生成する GameObject Bullet = Instantiate(BulletPrefab, transform.position, Quaternion.identity); Rigidbody BulletRb = Bullet.GetComponent<Rigidbody>(); // 弾をforwardに飛ばす BulletRb.AddForce(transform.forward * bulletSpeed); // 3秒後に弾を削除する。 Destroy(Bullet, 3.0f); } } }
####【指定したタグを持つオブジェクトの中で一番近いものを見つける】
GameObject SerchEnemy(string Enemy) { float dis = 0; //距離保存用 float nearDis = 0; //最も近いオブジェクトの距離 GameObject targetObj = null; //オブジェクト // 指定したタグのオブジェクトをすべて取得する foreach (GameObject obj in GameObject.FindGameObjectsWithTag(Enemy)) { // 敵との距離を計算 dis = Vector3.Distance(obj.transform.position, transform.position); // より近いオブジェクトか、距離が0のオブジェクトなら更新 if (nearDis > dis || dis == 0) { nearDis = dis; // 距離を保存 targetObj = obj; // ターゲットを更新 } } //最も近かったオブジェクトを返す return targetObj; }
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/19 14:19
2020/02/20 02:46
2020/02/20 14:08 編集
2020/02/21 02:23
2020/02/21 17:52
2020/02/25 02:17