應用Coroutine

介紹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);
    }