Question by
Ninjix3 · Mar 11, 2018 at 12:28 PM ·
nullspawning problemsdestroygameobjectwaves
Wave Spawn Script not working? From Null to Destroy Object.
So I have a wave spawner script and an attack script. My waves of enemies only appear for one wave. Once I destroy the enemies they never appear. Is it because I am destroying the game object rather than sending it to null?
Bellow is my wave spawner script and then my attack script.
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;
private 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 ())
{
Debug.Log ("WaveCompleted");
}
else
{
return;
}
}
if (waveCountdown <= 0) {
if (state != SpawnState.SPAWNING)
{
StartCoroutine( SpawnWave (waves[nextWave]));
}
} else {
waveCountdown -= Time.deltaTime;
}
}
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)
{
Transform _sp = SpawnPoints [Random.Range (0, SpawnPoints.Length)];
Instantiate(_enemy, _sp.position, _sp.rotation);
}
}
///////////////////////////////////////Attack Script//////////////////////////////////////////////
{
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");
}
} }
Comment
Are these complete scripts? Are your scripts containing Update() constructed as $$anonymous$$onoBehaviours?
These scripts are completed. both have an Update function and are using the $$anonymous$$onoBehavior class .