介紹Coroutine的各種應用:
1. 重複多次( for, while )
2. Start用在Coroutine上。IEnumerator Start()
3. Delay For Loading Scene
1. 利用for在1 wave 中產生"複數個敵人"。
2. 利用1的函數,產生"多波"的敵人
/// <summary>
/// spawn one wave after another
/// </summary>
/// <returns></returns>
private IEnumerator SpawnAllWaves()
{
for(int waveIndex = startingWave; waveIndex < waveConfigs.Count; waveIndex++)
{
WaveConfig currentWave = waveConfigs[waveIndex];
yield return StartCoroutine(SpawnAllEnemiesInWave(currentWave));
}
}
/// <summary>
/// 產生 one wave of enemies
/// </summary>
/// <param name="waveConfig">waveConfig</param>
/// <returns></returns>
private IEnumerator SpawnAllEnemiesInWave(WaveConfig waveConfig)
{
for (int enemyCount = 0; enemyCount < waveConfig.GetNumberOfEnemies(); enemyCount++)
{
GameObject newEnemy = Instantiate(waveConfig.GetEnemyPrefab(),
waveConfig.GetWaypoints()[0].position, Quaternion.identity);
newEnemy.GetComponent<EnemyPathing>().SetWaveConfig(waveConfig);
yield return new WaitForSeconds(waveConfig.GetTimeBetweenSpawns());
}
}
3. 將start 改為 IEnumerator Start(),並使用 while產生無窮的wave
// Start is called before the first frame update
IEnumerator Start()
{
do
{
yield return StartCoroutine(SpawnAllWaves());
} while (looping);
}