How do I add different enemies/mini waves inside a larger wave.
I'm very new to scripting and I'm stuck on something that's probably very basic. I have a script from a brackeys video (specifically this one). I completed the script but I want to be able to add more types of enemies as well as sub waves in a main wave. Also I want to know how to increase the difficulty and make it infinite. I'm on a 2D template btw if that changes anything. I know I'm asking for a lot of help here, and I tried mix and matching code from videos that have what I want, but its not working out. I would really appreciate if someone could teach me what I need to do as well. I would love to learn this so I can have "some" confidence within myself. Thank you in advance!
Here is the script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
public enum SpawnState {SPAWNING, WAITING, COUNTING }
[System.Serializable]
public class Wave
{
public string name;
public Transform enemy;
public int count;
public float rate;
}
public Wave[] waves;
private int nextWave = 0;
public Transform[] spawnPoints;
public float timeBtwWaves = 5f;
public float waveCountdown;
private float searchCountdown = 1f;
private SpawnState state = SpawnState.COUNTING;
// Start is called before the first frame update
void Start()
{
if (spawnPoints.Length == 0)
{
Debug.LogError("No spawn points referenced");
}
waveCountdown = timeBtwWaves;
}
// Update is called once per frame
void Update()
{
if (state == SpawnState.WAITING)
{
if (!EnemyIsAlive())
{
WaveCompleted();
}
else
{
return;
}
}
if (waveCountdown <= 0)
{
if (state != SpawnState.SPAWNING)
{
StartCoroutine(SpawnWave(waves[nextWave]));
}
}
else
{
waveCountdown -= Time.deltaTime;
}
}
void WaveCompleted()
{
Debug.Log("Wave Completed");
state = SpawnState.COUNTING;
waveCountdown = timeBtwWaves;
if (nextWave + 1 > waves.Length - 1)
{
nextWave = 0;
Debug.Log("All Waves Completed");
}
else
{
nextWave++;
}
}
bool EnemyIsAlive()
{
searchCountdown -= Time.deltaTime;
if (searchCountdown <= 0f)
{
searchCountdown = 1f;
if (GameObject.FindGameObjectWithTag("Enemy") == null)
{
return false;
}
}
return true;
}
IEnumerator SpawnWave(Wave _wave)
{
Debug.Log("Spawning Wave" + _wave.name);
state = SpawnState.SPAWNING;
for(int i = 0; i < _wave.count; i++)
{
SpawnEnemy(_wave.enemy);
yield return new WaitForSeconds(1f/_wave.rate);
}
state = SpawnState.WAITING;
yield break;
}
void SpawnEnemy (Transform _enemy)
{
Debug.Log("Spawning Enemy" + _enemy.name);
Transform _sp = spawnPoints[Random.Range(0, spawnPoints.Length)];
Instantiate(_enemy, _sp.position, _sp.rotation);
}
}
Your answer
Follow this Question
Related Questions
Survival Shooter Spawn Enemies in Waves? 0 Answers
wave spawner difficulty increase 1 Answer