while(ホワイル) 文は
反復処理と呼ばれる処理です。
条件を満たしている限り、繰り返し処理を行います。
今回のケースでは条件が「
true」です。この条件の指定の場合、
無制限の繰り返し処理を行います。
そのため、この処理はゲーム実行中ずっと繰り返されて終わることのない処理になります。
private IEnumerator EnemyShot() {
// 条件に true を指定すると無制限のループ処理になる
while (true) {
// エネミーのバレットのクローンを生成し、Bullet スクリプトを取得して、ShotBullet メソッドを実行する
Instantiate(enemyBulletPrefab, transform).GetComponent<Bullet>().ShotBullet(-transform.up);
// 5秒間処理を中断する(待機する)
yield return new WaitForSeconds(5.0f);
}
}
while 文内の処理は2つあり、1つはバレットの生成と発射メソッドの実行処理です。
もう1つは yield による中断(待機・遅延)の処理です。 yield return new WaitForSeconds メソッドは引数でした秒数だけ処理を中断します。
そのため、この while 文による繰り返しの処理は次のような挙動になります。
1.エネミーのバレットをプレファブのクローンとして生成し、そのゲームオブジェクトにアタッチされている Bullet スクリプトを取得して、ShotBullet メソッドを実行する
2.5秒待つ
3.【1】の処理に戻る
Update メソッドを利用していませんが、しっかりと一定の間隔でバレットを自動生成する処理を実装することが出来ました。
なお、while 文ではとくに今回のような無制限の繰り返し処理を実装する場合、処理を中断する処理を挟まないと
すごい数のエネミーのバレットを生成する処理が実行されて、
Unity のエディターが動かなくなります。
こうなってしまうと
再起動するしかなくなりますので、
while 文は特に気を付けて作業してください。
参考サイト
未確認飛行 C 様
反復処理
https://ufcpp.net/study/csharp/st_loop.html
他にも自動生成の処理は考えられます。色々な処理を試しておくことで処理の引き出しが広がり、
より多くの処理を実装できるようになりますので、いつも使っている処理だけではなく、新しい技術も取り入れていきましょう。