Unityで弾幕ゲームを制作しています
以下のように、「ランダムで生成された指定位置に移動」を5秒間繰り返し、その後画面下に移動し画面外に消えるという敵を作りました。
そこで、この5秒間の間だけミサイルを一定間隔で打ち出すという機能を作りたいのですが、コルーチンで自分で書いてみたところ何度も無限ループに陥ったり1度しか打ち出されなかったりと成功しませんでした。
ですので、どうすれば良いのか助言を頂きたいです。
C#
1public class Enemy8 : MonoBehaviour 2{ 3 //ランダム移動について 4 private float speed1 = 0.1f; 5 private int speed2 = 13; 6 public GameObject player; 7 Vector3 movePosition; 8 9 //最初の移動について 10 private Vector3 destination; 11 12 //ミサイル発射について 13 public GameObject enemyFireEnemyPrefab; 14 public int wayNumber; 15 16 void Start() 17 { 18 destination = new Vector3(0f, 0f, 20f); 19 } 20 21 void Update() 22 { 23 24 transform.position += new Vector3(0, 0, -1) * speed1; 25 26 if (Vector3.Distance(transform.position, destination) < 0.5f) 27 { 28 speed1 = 0f; 29 this.GetComponent<CapsuleCollider>().enabled = true; 30 movePosition = moveRandomPosition(); 31 32 //最初の位置についたらコルーチン開始 33 StartCoroutine(FireEnemy()); 34 } 35 this.player.transform.position = Vector3.MoveTowards(player.transform.position, movePosition, speed2 * Time.deltaTime); 36 37 //ランダム移動について 38 if (movePosition == player.transform.position) 39 { 40 movePosition = moveRandomPosition(); 41 } 42 this.player.transform.position = Vector3.MoveTowards(player.transform.position, movePosition, speed2 * Time.deltaTime); 43 } 44 45 //移動範囲 46 Vector3 moveRandomPosition() 47 { 48 Vector3 randomPosi = new Vector3(Random.Range(-20, 20), 0, Random.Range(0, 40)); 49 return randomPosi; 50 } 51 52 //ここをどう書けばいいか分からないです 53 private IEnumerator FireEnemy() 54 { 55 for (int i = 0; i < wayNumber; i++) 56 { 57 Instantiate(enemyFireEnemyPrefab, transform.position, Quaternion.Euler(0, 120 + (30 * i), 0)); 58 } 59 } 60}
「5秒たったら真っ直ぐ移動する」などは他のスクリプトで操作します。
回答2件
あなたの回答
tips
プレビュー