Enemy spawner - Spawning limited amount of enemies
Hello I am trying to make a spawner that spawn enemies.
What I am trying to make is to make the spawner Instantiate 50 enemies and after one enemy dies it will spawn another one until the number of enemies is 50 if 10 enemys are dead spawn another 10 and keep the number of living enemies 50 again.
I have this script that will spawn limited amount of enemies.It spawns enemies in waves but I want to make it so i don't need to create and asign numbers in waves I want the spawner to always spawn enemies until it 50 enemies are created and alive. public class Spawner : MonoBehaviour {
public Wave[] waves;
public NepritelPOHYB enemy;
Wave currentWave;
int currentWaveNumber;
int enemiesRemainingToSpawn;
int enemiesRemainingAlive;
float nextSpawnTime;
void Start()
{
NextWave();
}
void Update()
{
if (enemiesRemainingToSpawn > 0 && Time.time > nextSpawnTime)
{
enemiesRemainingToSpawn--;
nextSpawnTime = Time.time + currentWave.timeBetweenSpawns;
NepritelPOHYB spawnedEnemy = Instantiate(enemy, transform.position, Quaternion.identity) as NepritelPOHYB;
spawnedEnemy.OnDeath += OnEnemyDeath;
}
}
void OnEnemyDeath()
{
enemiesRemainingAlive--;
if (enemiesRemainingAlive == 0)
{
NextWave();
}
}
void NextWave()
{
currentWaveNumber++;
print("Wave: " + currentWaveNumber);
if (currentWaveNumber - 1 < waves.Length)
{
currentWave = waves[currentWaveNumber - 1];
enemiesRemainingToSpawn = currentWave.enemyCount;
enemiesRemainingAlive = enemiesRemainingToSpawn;
}
}
[System.Serializable]
public class Wave
{
public int enemyCount;
public float timeBetweenSpawns;
}
}
Answer by ericford · Dec 03, 2017 at 12:27 AM
This could be a very simple solution for the exact situation you are looking for:
int desiredEnemiesInGame = 50;
int currentEnemiesInGame = 0;
void Start()
{
currentEnemiesInGame = 0;
}
void Update()
{
if (currentEnemiesInGame < desiredEnemiesInGame)
{
SpawnNewEnemy();
}
}
void SpawnNewEnemy()
{
NepritelPOHYB spawnedEnemy = Instantiate(enemy, transform.position, Quaternion.identity) as NepritelPOHYB;
spawnedEnemy.OnDeath += OnEnemyDeath;
currentEnemiesInGame++;
}
void OnEnemyDeath()
{
currentEnemiesInGame--;
}
This should ensure that there are always 50 (the desired amount) of enemies in the game.
Hope this helps!