Question by
Ninjix3 · Mar 21, 2018 at 06:30 PM ·
taggameobjectsenemy spawnwaves
Wave Spawner does not spawn Next wave?
For some reason, my "Wave Completed Log" doesn't show up. I'm wondering if its because in my player attack Script under Update () I have a get key down that destroys the enemy array DestroyObject (MyEnemies [i]);
I'm unsure if I have to specifically have a Kill enemy() function. Can anyone help me so that way the new wave can be completed and respawned?
Here is the Tutorial I am using https://www.youtube.com/watch?v=q0SBfDFn2Bs&t=691s
public class AttackAnim : MonoBehaviour {
public GameObject[] MyEnemies;
//public GameObject[] MyFishes;
public Animator anim;
// Use this for initialization
void Start ()
{
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown ("w")) {
MyEnemies = GameObject.FindGameObjectsWithTag ("Enemy");
//MyFishes = GameObject.FindGameObjectsWithTag ("Fish");
for (int i = 0; i < MyEnemies.Length; i++)
DestroyObject (MyEnemies [i]);
//for (int i = 0; i < MyFishes.Length; i++)
//DestroyObject (MyFishes [i]);
anim.Play ("DaniAttack");
}
if (Input.GetKeyDown ("s")) {
anim.Play ("DaniSheild");
}
} }
Here is my Wave Script:
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 timeBetweenWaves = 5f;
public float waveCountdown;
private float searchCountdown = 1f;
private SpawnState state = SpawnState.COUNTING;
// Use this for initialization
void Start () {
waveCountdown = timeBetweenWaves;
}
// 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 = timeBetweenWaves;
if (nextWave + 1 > waves.Length - 1)
{
nextWave = 0;
Debug.Log("All Waves Complete! Looping.");
}
nextWave++;
}
bool EnemyIsAlive()
{
searchCountdown -= Time.deltaTime;
if (searchCountdown <= 0f) {
searchCountdown = 1f;
if (GameObject.FindGameObjectsWithTag ("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);
}
}
Comment