Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 /
  • Help Room /
avatar image
0
Question by C_9821 · May 13 at 06:11 PM · waves

WaveSpawner

i have a wave spawner script from a video i saw, since I'm fairly new to this still and its just more so a learning experience than anything really, but when spawning in the zombies im quite confused why the Wave Countdown is stuck and not counting down after i have killed them all to go onto another wave? the code for the wavespawner im using is

using UnityEngine; using System.Collections;

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;
 public int nextWave = 1;
 public int NextWave
 {
     get { return nextWave + 1; }
 }

 public Transform[] spawnPoints;

 public float timeBetweenWaves = 5f;
 public float waveCountdown;
 public float WaveCountdown
 {
     get { return waveCountdown; }
 }

 private float searchCountdown = 1f;

 private SpawnState state = SpawnState.COUNTING;
 public SpawnState State
 {
     get { return state; }
 }

 void Start()
 {
     if (spawnPoints.Length == 0)
     {
         Debug.LogError("No spawn points referenced.");
     }

     waveCountdown = timeBetweenWaves;
 }

 void Update()
 {
     if (state == SpawnState.WAITING)
     {
         if (!EnemyIsAlive())
         {
             WaveCompleted();
         }
         else
         {
             return;
         }
     }

     if (waveCountdown <= 1)
     {
         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...");
     }
     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);
 }

}

Comment
Add comment · Show 3
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 rh_galaxy · May 13 at 06:28 PM 0
Share

Can you test this change:

 if (waveCountdown <= 0f) //0f instead of 1
 {
     if (state == SpawnState.COUNTING) //new condition
     {
         state = SpawnState.SPAWNING; //set state before doing StartCoroutine
         StartCoroutine(SpawnWave(waves[nextWave]));
     }
 
 IEnumerator SpawnWave(Wave _wave)
 {
     Debug.Log("Spawning Wave: " + _wave.name);
     //state = SpawnState.SPAWNING; //comment this line

If it works I think I can explain. It would be that the actual code in SpawnWave() is just added to a list to run later, so the coroutine can start twice. But it might be something else.

Can you also add the Debug.Log output?

avatar image C_9821 rh_galaxy · May 13 at 07:14 PM 0
Share

I tried this and it didn't seem to work, if this is any help though i am using emerald AI so that might alo be it because of the events and im not so sure on how to exactly go about doing

avatar image C_9821 C_9821 · May 13 at 07:15 PM 0
Share

also if the output you're asking is whats in the console, it says Wave 1 and spawning the 2 zombies i have in wave 1 but doesn't finish the Wave Completed part of it

0 Replies

· Add your reply
  • Sort: 

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

182 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

Related Questions

How to show a "warning" effect before enemy spawns in a 2D shooter? 0 Answers

Really need help please/A switch expression of type `float' cannot be converted to an integral type, bool, char, string, enum or nullable type 2 Answers

Wave Spawn Script not working? From Null to Destroy Object. 0 Answers

New wave always spawns with wrong amount of enemies / also does not delay 1 Answer

Wind zones unable to create waves rolling through foliage? Cant be! 0 Answers


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