前提・実現したいこと
ここに質問の内容を詳しく書いてください。
C# unityで2Dシューティングを作っており、
自機の弾丸を数フレーム間隔で発射を繰り返すコードを組んでいるのですが、
想定通りに動きません。
どなたかアドバイスをいただけると嬉しいです。
発生している問題・エラーメッセージ
スペースキーを押した際に、for文以下を繰り返して、 等間隔に発射したいのですが、 スペースを押してもinput.Getkey以下の文章が起動しません。 またstart関数にあるコルーチンは始動しており、 コンソールにデバッグログの内容が出力しております。
該当のソースコード
C#
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class BulletController : MonoBehaviour 7{ 8 //弾の速さ 9 private const int SPEED = 10; 10 11 //自機弾丸の生成 12 public GameObject Bullet0Prefab; 13 14 // 画面の一番上のy座標。画面外かどうかの判定に使用 15 private float ScreenTop; 16 17 private Rigidbody2D myRigidbody2d; 18 private Transform myTransform; 19 20 //弾を連続で発射する際の間隔 21 public float interval = 0.1f; 22 23 void Start() 24 { 25 26 StartCoroutine(enumerator()); 27 28 } 29 30 31 void Awake() 32 { 33 myRigidbody2d = GetComponent<Rigidbody2D>(); 34 myTransform = GetComponent<Transform>(); 35 36 // 画面の一番上のy座標を取得 37 ScreenTop = Camera.main.ViewportToWorldPoint(new Vector2(0, 1)).y; 38 // 弾を上に移動させる 39 myRigidbody2d.velocity = myTransform.up.normalized * SPEED; 40 41 42 43 44 } 45 46 void Update() 47 { 48 // Rigidbody2Dのsimulatedがfalse(弾が使われていない状態)であれば何もしない 49 if (myRigidbody2d.simulated == false) 50 return; 51 52 // ここからはRigidbody2Dのsimulatedがtrueの場合(=弾が動いている場合) 53 // 画面外に弾が出ていたらRigidbody2Dのsimulatedをfalseにして物理演算を止める(弾をストップする) 54 // +1しているのは余裕を持っているだけです。 55 if (myRigidbody2d.position.y > ScreenTop + 1) 56 { 57 myRigidbody2d.simulated = false; 58 } 59 } 60 61 62 63 IEnumerator enumerator() 64 { 65 Debug.Log("あいうえお"); 66 67 68 while (Input.GetKey(KeyCode.Space)) 69 { 70 71 72 for (int Bulletlimit = 0; Bulletlimit < 10; Bulletlimit += 1); 73 74 yield return new WaitForSeconds(interval); 75 76 GameObject Bullet0 = Instantiate(Bullet0Prefab) as GameObject; 77 78 79 if (Bullet0Prefab.transform.position.y > ScreenTop) 80 { 81 //画面外の弾丸を破棄する 82 Destroy(this.gameObject); 83 } 84 85 86 87 88 } 89 90 } 91 92}
試したこと
debug.logを用いてIEnumerator enumerator()まで指示が行き届いていることを
確認した。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。