前提
Unityの3Dで敵を作っています。棘を一気に6個生成して、一個ずつホーミングしたいのですが、一気に生成してしまうと、ホーミングが同じ時間にしてしまうため、今は一個ずつ生成するようにして、生成したタイミングから6秒たったらホーミングする動きにしています。何かいい案があったら教えてください。
実現したいこと
棘を一気に6個生成して、一個ずつホーミングしたい
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Enemy_homing : MonoBehaviour 6{ 7 public GameObject player; //プレイヤー 8 public GameObject ball; //プレハブ 9 float period = 2f; //着地時間 10 Vector3 velocity; //速度 11 12 public GameObject[] pos = new GameObject [6]; //生成位置格納 13 14 void Start() 15 { 16 transform.LookAt(player.transform); 17 18 StartCoroutine(FuncCoroutine()); 19 } 20 21 void Update() 22 { 23 //プレイヤーの方向を見る 24 transform.LookAt(player.transform); 25 } 26 27 IEnumerator FuncCoroutine() 28 { 29 //6個生成 30 for (int i = 0; i < pos.Length; ++i) 31 { 32 yield return new WaitForSeconds(1.0f); 33 34 Instantiate(ball, pos[i].transform.position, Quaternion.identity); 35 36 } 37 } 38} 39 40 41プレハブのほうにホーミングの処理をかいています。 42 43//プレハブ 44using System.Collections; 45using System.Collections.Generic; 46using UnityEngine; 47 48public class Homing : MonoBehaviour 49{ 50 Rigidbody rb; //rigidbodyを入れる変数 51 Vector3 velocity; //速度 52 public Vector3 acceleration; //加速度 53 private GameObject player; //プレイヤー 54 float period = 5f; //着弾時間 55 56 private void Start() 57 { 58 player = GameObject.Find("Player"); 59 rb = GetComponent<Rigidbody>(); 60 } 61 62 void Update() 63 { 64 StartCoroutine(Hom()); 65 } 66 67 private void FixedUpdate() 68 { 69 // 移動処理 70 rb.MovePosition(transform.position + velocity * Time.deltaTime); 71 } 72 73 private void OnCollisionEnter() 74 { 75 ///何かに当たったら自分自身を削除 76 Destroy(this.gameObject); 77 } 78 79 IEnumerator Hom() 80 { 81 yield return new WaitForSeconds(6); // 6秒間待機 82 83 //加速度を0 84 acceleration = Vector3.zero; 85 86 //ターゲットと自分自身の差 87 var diff = player.transform.position - transform.position; 88 89 //加速度求める 90 acceleration += (diff - velocity * period) * 2f / (period * period); 91 92 93 //加速度が一定以上だと追尾を弱くする 94 if (acceleration.magnitude > 100f) 95 { 96 acceleration = acceleration.normalized * 100f; 97 } 98 99 // 着弾時間を徐々に減らしていく 100 period -= Time.deltaTime; 101 102 // 速度の計算 103 velocity += acceleration * Time.deltaTime; 104 } 105} 106 107
試したこと
生成にコルーチンを使って1秒ずつにし、6秒待ったらホーミングする
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー