- 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++;
}
},