unity公式の2Dshootingチュートリアルの敵集団をwaveを作る仕組みの中で、下記スクリプトが出てきました。
c#
1using UnityEngine; 2using System.Collections; 3 4public class Emitter : MonoBehaviour 5{ 6 // Waveプレハブを格納する 7 public GameObject[] waves; 8 9 // 現在のWave 10 private int currentWave; 11 12 IEnumerator Start () 13 { 14 15 // Waveが存在しなければコルーチンを終了する 16 if (waves.Length == 0) { 17 yield break; 18 } 19 20 while (true) { 21 22 // Waveを作成する 23 GameObject wave = (GameObject)Instantiate (waves [currentWave], transform.position, Quaternion.identity); 24 25 // WaveをEmitterの子要素にする 26 wave.transform.parent = transform; 27 28 // Waveの子要素のEnemyが全て削除されるまで待機する 29 while (wave.transform.childCount != 0) { 30 yield return new WaitForEndOfFrame (); 31 } 32 33 // Waveの削除 34 Destroy (wave); 35 36 // 格納されているWaveを全て実行したらcurrentWaveを0にする(最初から -> ループ) 37 if (waves.Length <= ++currentWave) { 38 currentWave = 0; 39 } 40 41 } 42 } 43}
この中の、
c#
1while (wave.transform.childCount != 0) { 2 yield return new WaitForEndOfFrame (); 3 }
の部分ですが、wave.transform.childCount != 0がfalseになった時に次のDestroy (wave);まで進むことができるという機能になっているかと思います。
しかし、このwhile文でなぜそうなるのか、ということが理解できません。
WaitForEndOfFrame のドキュメントの説明を見ると、「スクリーン上のレンダリングが完了するまで待ちます。」とあります。なぜレンダリングの話がでてくるのでしょうか。
また、wave.transform.childCount != 0がfalseになった時にDestroy (wave);に移るということは、もしかするとtrueの間はyield return new WaitForEndOfFrame ();はcontinueのような使われ方で、ループの先頭に戻る役割を担っているのでしょうか。つまり、falseになった瞬間にcontinueしなくなったので、次に進めたということかな、と。(だとしてもドキュメントの説明とつながらないように思えます)
何卒ご教授頂けると嬉しいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/24 22:21 編集
2017/10/25 02:25 編集
2017/10/25 05:49