IEnumeratorを使い、銃弾を複製したいのですがIEnumeratorの中の処理が実行されません。原因がわかる方、教えてくれると嬉しいです。
行いたいこと
2Dゲームを作っており、その敵に自分の座標に銃を撃ってくるプログラムをしたい。
そこで2秒に一発、銃弾のプレハブを作り、その銃弾が複製されたときの自分の座標に向かって飛んでくるプログラムを書こうと考え、ネットでしらべたところ、IEnumeratorという時間の取り扱いができる関数があることを知りそれを使ってみようと考えた。
問題点
IEnumerator内の処理が全て、一回も行われない
経緯
IEnumerator関数を作り、その中に弾の複製や弾を飛ばす座標をどう決めるかのプログラムを書き、Start関数内に、Start Coroutineのコードを書き、そこからIEnumeratorの処理を行えるようして、実行させようと試みたがプレハブが作成されなかった。
プレハブの作成に問題があるのか、IEnumerator関数そのものに問題があるのか、IEnumerator関数内に文字を表示させるプログラムを書いたところ、コンソールに表示されなかった。
わかっていること
・start関数は文字を表示させるプログラム(DebugLog)により動作していることが確認済み
・IEnumerator内部にDebugLogを打ち込んでも反応しなかった
・キーを押したときにIEnumeratorを実行するような、start関数内以外からの関数を実行する方法も試したが起動されなかった。
・update内にプレハブを生成するプログラムを書くと、その時は正常に一フレームに一つプレハブが生成された。
・コードエラーは確認されておらず、ゲームは普通にプレイできる。
・IEnumeratorの中のループ文の外に書いたプログラムは実行された。
C#
1コード 2```using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class enemyattacksc : MonoBehaviour 7{ 8 GameObject chobforenemyattack; 9 GameObject enemyobforenemyattack; 10 public GameObject bulletprefab; 11 character chscforenemyattack; 12 enemysc enemyscforenemyattack; 13 14 Vector3 chposfornerai; 15 Vector3 enemypos2; 16 public Vector3[] neraizahyou; 17 18 public int counter; 19 20 // Start is called before the first frame update 21 void Start() 22 { 23 Debug.Log("Oi"); 24 chobforenemyattack = GameObject.Find("figure_hashiru"); 25 chscforenemyattack = chobforenemyattack.GetComponent<character>(); 26 27 enemyobforenemyattack = GameObject.Find("enemy"); 28 enemyscforenemyattack = enemyobforenemyattack.GetComponent<enemysc>(); 29 30 // 関数"Zahyouset"を実行 31 StartCoroutine(Zahyouset()); 32 33 counter = -1; 34 } 35 36 // 以下"Zahyouset"関数 37 IEnumerator Zahyouset() 38 { 39 while (true) 40 { 41 counter += 1; 42 neraizahyou[counter] = chposfornerai; 43 44 Instantiate(bulletprefab, enemypos2, Quaternion.identity); 45 46 yield return new WaitForSeconds(2f); 47 } 48 } 49 50 // Update is called once per frame 51 void Update() 52 { 53 chposfornerai = chscforenemyattack.charactermovement; 54 55 enemypos2 = enemyscforenemyattack.enemypos; 56 57 } 58}

回答2件
あなたの回答
tips
プレビュー