- Home /
Need help with tower defense win level system,need help with tower defense win level system
when all the enemies of that last wave are killed I want the level to transition to the next level. Right now as soon as the last wave has all spawned in it transition into level 2. I keep on getting this error: IndexOutOfRangeException: Array index is out of range. WaveSpawner+c__Iterator0.MoveNext () (at Assets/scripts/WaveSpawner.cs:45) UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17) UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) WaveSpawner:Update() (at Assets/scripts/WaveSpawner.cs:29)
This is the script its saying has that error:
if (waveIndex == waves.Length) {
             if (EnemiesAlive <= 0f)
             {
             gameManager.WinLevel();
             this.enabled = false;
             }
         }
here is the entire script: using UnityEngine; using System.Collections; using UnityEngine.UI; public class WaveSpawner : MonoBehaviour {
 public static int EnemiesAlive = 0;
 public Wave[] waves;
 public Transform spawnPoint;
 public float timeBetweenWaves = 4f;
 public float countdown = 3f;
 public Text WaveCountdownText;
 public GameManager gameManager;
 private int waveIndex = 0;
 void Update()
 {
     /*if (EnemiesAlive > 0)
     {
         return;
     }*/
     if (countdown <= 0f)
     {
         StartCoroutine(SpawnWave());
         countdown = timeBetweenWaves;
         return;
     }
     countdown -= Time.deltaTime;
     countdown = Mathf.Clamp(countdown, 0f, Mathf.Infinity);
     WaveCountdownText.text = string.Format("{0:00.00}", countdown);
 }
 IEnumerator SpawnWave()
 {
     
     PlayerStats.Rounds++;
     Wave wave = waves[waveIndex];
     EnemiesAlive = wave.count+wave.count2+wave.count3;
     for (int i = 0; i < wave.count; i++)
     {
         SpawnEnemy(wave.enemy);
         yield return new WaitForSeconds(1f / wave.rate);
     }
 
     for (int i = 0; i < wave.count2; i++)
     {
         SpawnEnemyTwo(wave.enemy2);
         yield return new WaitForSeconds(1f / wave.rate2);
     }
     for (int i = 0; i < wave.count3; i++)
     {
         SpawnEnemyThree(wave.enemy3);
         yield return new WaitForSeconds(1f / wave.rate3);
     }
     waveIndex++;
         if (waveIndex == waves.Length)
         {
             if (EnemiesAlive <= 0f)
             {
             gameManager.WinLevel();
             this.enabled = false;
             }
         }
     
 }
 void SpawnEnemy(GameObject enemy)
 {
     Instantiate(enemy, spawnPoint.position, spawnPoint.rotation);
     
     //EnemiesAlive++;
 }
 void SpawnEnemyTwo(GameObject enemy2)
 {
     Instantiate(enemy2, spawnPoint.position, spawnPoint.rotation);
     //EnemiesAlive++;
 }
 void SpawnEnemyThree(GameObject enemy3)
 {
     Instantiate(enemy3, spawnPoint.position, spawnPoint.rotation);
     //EnemiesAlive++;
 }
},
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                