Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by EinfachFinn · Jan 15 at 05:36 PM · c#scripting problemenemyspawnwaves

Wave Spawner not working |Does not detect if an object is destroyed

Hey, I have a question regarding this script. I have watched this tutorial several times but I can't detect the error. Can someone help me? The script is spawning 2 Enemies like i said it should do, but its not detecting if delete these Enemies. I appreciate any answer. Thanks in advance! Finn Part 1 https://www.youtube.com/watch?v=Vrld13ypX_I Part 2 https://www.youtube.com/watch?v=q0SBfDFn2Bs

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class WaveSpawner : MonoBehaviour {
 
 
     public enum SpawnState { Spawning, Waiting, Counting } // state of the Wave
 
     [System.Serializable]
     public class Wave
     {
 
 
         public string name; //wave name: Easy
         public Transform enemy; //Which Prefab should be spawned: Enemy
         public int count; //how much Enemys should be spawned per wave: 6
         public float rate; //how often the count of enemies should spawn
 
     }
 
     public Wave[] waves;
     private int nextWave = 0;
 
     public float timeBetweenWaves = 5f; //Time between waves: 5f = 5seconds
     public float waveCountdown; //time Counting down to next wave: 3... 2... 1...
     private float searchCountdown = 1f; // how long to search for alive enemies
     private SpawnState state = SpawnState.Counting;
     void Start()
     {
         waveCountdown = timeBetweenWaves;
     }
 
     void Update()
     {
         if (state == SpawnState.Waiting) //starts method to check if enemies are still alive
         {
             searchCountdown = 1f; //search countdown 1s
             if (!EnemyIsAlive())
             {
                 //begin a new Wave
                 Debug.Log("Wave Completed!");
                 return;
             }
             else
             {
                 return;
             }
 
         }
 
 
 
 
         if (waveCountdown <= 0) //ask if ready for new Wave
         {
             if (state != SpawnState.Spawning) //ask if Waves are already spawning
             {
                 StartCoroutine( SpawnWave ( waves[nextWave] ) ); //start Spawning Routine
             }
         }
         else
         {
             waveCountdown -= Time.deltaTime; //if not count down
         }
     }
 
     bool EnemyIsAlive() //method to search for living enemies
     {
         searchCountdown -= Time.deltaTime; //count down search time
         if (searchCountdown <= 0f) //if search countdown = 0
         {
             if (GameObject.FindGameObjectWithTag("Enemy") == null) //check if enemy is alive
             {
                 return false; //enemies arent allive
             }
 
         }
         return true; // enemies are allive
     }
 
 
 
 
 
     IEnumerator SpawnWave (Wave _wave) //Spawning Routine
     {
     Debug.Log("Spawning Wave: " + _wave.name);
         state = SpawnState.Spawning; //State: Spawning
         
         for (int i = 0; i < _wave.count; i++) //loop through amount of enemy
         {
             SpawnEnemy(_wave.enemy); //spawn enemy Method
             yield return new WaitForSeconds(1f / _wave.rate); //time between spawning of each enemy
         }
         state = SpawnState.Waiting; //State: Waiting
     yield break; //stop
     }
 
     void SpawnEnemy (Transform _enemy) //spawn enemy Method
     {
     Debug.Log("Spawning Enemy: " + _enemy.name);
     Instantiate(_enemy, transform.position, transform.rotation);
     }
 }
 
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by Developers_Hub · Jan 16 at 11:20 AM

I think EnemyIsAlive() is returning the wrong value, I've made some changes and adjustments, hope it helps.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 public class WaveSpawner: MonoBehaviour
 {
 
     public enum SpawnState { Spawning, Waiting, Counting, Finished } // State of the wave
 
     [System.Serializable] public class Wave
     {
         public string name = "Easy";      // Wave name: Easy
         public Transform enemy = null;    // Which prefab should be spawned: Enemy
         public int count = 6;             // How much enemys should be spawned per wave: 6
         public float rate = 3;            // How often the count of enemies should spawn
     }
 
     public Wave[] waves = null;
     public float timeBetweenWaves = 5f;   // Time between waves: 5f = 5 seconds
     public int countdownFrom = 3;         // The number which countdown starts from
     public int waveCountdown = 0;         // Time Counting down to next wave: 3... 2... 1...
 
     private int waveIndex = 0;
     private int enemyIndex = 0;
     private float timer = 0;
     private SpawnState state = SpawnState.Counting;
     private string enemyTag = "Enemy";
 
     private void Start()
     {
         waveIndex = 0;
         enemyIndex = 0;
         state = SpawnState.Waiting;
         waveCountdown = 0;
         timer = 0;
         if(waves == null || waves.Length == 0)
         {
             state = SpawnState.Finished;
         }
     }
 
     void Update()
     {
         if(state == SpawnState.Finished)
         {
             return;
         }
 
         switch (state)
         {
             case SpawnState.Spawning:
                 if(enemyIndex >= waves[waveIndex].count)
                 {
                     enemyIndex = 0;
                     waveIndex++;
                     state = SpawnState.Waiting;
                     Debug.Log("Wave spawned.");
                     if (waveIndex < waves.Length)
                     {
                         Debug.Log("Waiting for the next wave.");
                     }
                     else
                     {
                         Debug.Log("That was the last wave.");
                     }
                 }
                 else
                 {
                     if(timer >= waves[waveIndex].rate)
                     {
                         timer = 0;
                         waveCountdown = countdownFrom;
                         enemyIndex++;
                         SpawnEnemy(waves[waveIndex].enemy);
                     }
                     else
                     {
                         timer += Time.deltaTime;
                     }
                 }
                 break;
             case SpawnState.Waiting:
                 if (waveIndex >= waves.Length)
                 {
                     if (!EnemyIsAlive())
                     {
                         state = SpawnState.Finished;
                         Debug.Log("All Waves Completed. Level finished.");
                     }
                 }
                 else
                 {
                     if (timer >= timeBetweenWaves)
                     {
                         timer = 0;
                         waveCountdown = countdownFrom;
                         state = SpawnState.Counting;
                         Debug.Log("Countdown started.");
                     }
                     else
                     {
                         timer += Time.deltaTime;
                     }
                 }
                 break;
             case SpawnState.Counting:
                 if (timer >= countdownFrom)
                 {
                     timer = 0;
                     waveCountdown = 0;
                     state = SpawnState.Spawning;
                     Debug.Log("Countdown finished. Spawning new wave.");
                 }
                 else
                 {
                     timer += Time.deltaTime;
                     waveCountdown = countdownFrom - Mathf.FloorToInt(timer);
                 }
                 break;
         }
     }
 
     private bool EnemyIsAlive() // Method to search for living enemies
     {
         GameObject[] objects = GameObject.FindGameObjectsWithTag(enemyTag);
         return objects != null && objects.Length > 0;
     }
     
     private void SpawnEnemy(Transform _enemy) // Spawn enemy Method
     {
         Transform enemy = Instantiate(_enemy, transform.position, transform.rotation);
         enemy.tag = enemyTag;
         Debug.Log("Enemy spawned: " + _enemy.name);
     }
 
 }
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image EinfachFinn · Jan 16 at 02:47 PM 0
Share

Hey, now the WaveCountdown starts. This is great! Unfortunately it starts again and again and not only when an object disappears, so that I have a bunch of enemies running around after a very short time. How could this be changed?

avatar image Developers_Hub EinfachFinn · Jan 16 at 06:41 PM 0
Share

Change this and the next wave wont start until you remove all the enemies of the current wave.

 case SpawnState.Spawning:
     if (enemyIndex >= waves[waveIndex].count)
             {
                 if (!EnemyIsAlive())
                 {
                     enemyIndex = 0;
                     waveIndex++;
                     state = SpawnState.Waiting;
                     if (waveIndex < waves.Length)
                     {
                         Debug.Log("Waiting for the next wave.");
                     }
                     else
                     {
                         Debug.Log("That was the last wave.");
                     }
                 }
             }
             else
             {
                 if (timer >= waves[waveIndex].rate)
                 {
                     timer = 0;
                     waveCountdown = countdownFrom;
                     enemyIndex++;
                     SpawnEnemy(waves[waveIndex].enemy);
                 }
                 else
                 {
                     timer += Time.deltaTime;
                 }
             }
             break;

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

777 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Enemy Spawn Script Spawning Infinite Enemies [Help] 2 Answers

How to make my enemies spawn at spawn point, but not randomly? 1 Answer

Multiple Cars not working 1 Answer

How to spawn enemy? (Enemies) 1 Answer

How to create an enemy wave system? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges