前提・実現したいこと
今3Dのゲームで、一定範囲内にプレイヤーが近づいたら
予測線を出す
→数秒後に銃を撃つ
→数秒後に弾を破壊
というコードを書こうとしています。
プレイヤーが敵を壊さない限り上記の行動をさせたいので調べてコルーチンを使ってみましたが、コードを実行したらパソコンが固まりました。
おそらくどこかで間違ったループ処理をしているからだと思うのですが、コルーチンをまだ完璧に理解できていないのでどこで間違えているかがわかりません。
分かる方がいたら是非教えてください。
発生している問題・エラーメッセージ
コードを実行するとパソコンが固まる
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class EnemyShoot : MonoBehaviour 6{ 7 public GameObject player;//プレイヤー取ってくる 8 public GameObject bullet;//弾丸プレハブ参照 9 public GameObject predicton;//予測線 10 int speed = 20;//弾丸速度 11 int lifetime = 20;//弾丸寿命 12 float alertdistance = 20;//警戒距離 13 float distance;//実際の距離 14 15 16 // Start is called before the first frame update 17 void Start() 18 { 19 StartCoroutine("EnemyMove"); 20 } 21 22 // Update is called once per frame 23 void Update() 24 { 25 } 26 27 void Rotate()//回転 28 { 29 Vector3 aim = player.transform.position - this.transform.position; 30 Quaternion look = Quaternion.LookRotation(aim); 31 this.transform.localRotation = look; 32 33 } 34 35 void Shoot()//狙撃 36 { 37 GameObject bullets = GameObject.Instantiate(bullet);//弾丸呼び出し 38 bullets.transform.position = this.transform.position;//弾丸の位置合わせ 39 bullets.transform.rotation = this.transform.rotation;//弾丸を回転 40 Vector3 force = this.transform.forward * speed;//発射する方向と速度合わせ 41 bullets.GetComponent<Rigidbody>().AddForce(force, ForceMode.Impulse);//発射 42 Destroy(bullets, lifetime);//破壊 43 44 } 45 46 IEnumerator EnemyMove()//一連の動作 47 { 48 while (true) 49 { 50 distance = (this.transform.position - player.transform.position).sqrMagnitude; 51 52 if (distance <= alertdistance * alertdistance)//一定距離に入ったら発動 53 { 54 Rotate(); 55 predicton.SetActive(true);//予測線 56 yield return new WaitForSeconds(1);//1秒待機 57 Shoot(); 58 predicton.SetActive(false); 59 yield return new WaitForSeconds(1);//1秒待機 60 yield return null; 61 } 62 } 63 64 } 65 66} 67
回答1件
あなたの回答
tips
プレビュー