- Home /
c# Enemy's spawning over time, problem
I'm trying to get infinite enemy's to spawn more frequently over time. atm the "numberOfEnemy" (3) will spawn but no more after that. what am i doing wrong or if there is a better way to do this that would be great. :)
     public GameObject enemy;
 
     private float timePassed = 0f;
     private float spawnRate = 0f;
     private int numberOfEnemy = 3;
 
     private int m = 3;
     private int i = 0;
 
     // Update is called once per frame
     void Update () {
 
         timePassed += Time.deltaTime;
         spawnRate += Time.deltaTime;
 
         /*if (timePassed >= 60f) {            
             
             if (m >= 2) {
                 m -= 1;
             }
 
             numberOfEnemy += 1;
             timePassed = 0f;
         }*/
 
         if (spawnRate >= m) {
             while (i < numberOfEnemy) {
                 Instantiate(enemy);
                 i++;
             }
             spawnRate = 0f;
         }
     }
Answer by Waffle Dragon · Mar 03, 2014 at 01:13 PM
I managed to solve this one. Ill post it for anyone else looking for a similar fix. Although if you have a better method please post below.
     public GameObject enemy;
 
     private float timePassed = 0f;
     private float spawnRate = 0f;
     private int numberOfEnemy = 2;
     private float m = 4f;
 
     void Awake () {
         spawnRate = Time.time + m;
     }
 
     // Update is called once per frame
     void Update () {
 
         timePassed += Time.deltaTime;
 
         if (timePassed >= 10f) {            
             if (m >= 1) {
                 m -= 0.5f;    
             }
             numberOfEnemy += 1;
             timePassed = 0f;
         }
 
         if (spawnRate < Time.time) {
             for (int i = 0; i < numberOfEnemy; i++) {
                 Instantiate(enemy);
             }
             spawnRate = Time.time + m;
         }
     }
 }
 
Answer by tw1st3d · Mar 03, 2014 at 01:24 PM
If I had to pick a way to do it, I'd do it like this.
 using UnityEngine;
 using System.Collections;
 
 public class Spawn : MonoBehavior
 {
     public GsameObject enemy;
     private float timePassed = 0f, spawnRate = 0f, m = 4f, spawnTimer = 0f;
     private int numberOfEnemy = 2;
     
     void Start()
     {
         StartCoroutine(Speed());
         StartCoroutine(Spawn());
     }
     
     IEnumerable Speed()
     {
         timePassed += Time.deltaTime;
         if(timePassed >= 10.1f) {
             timePassed = 0.0f;
             numberOfEnemy++;
             spawnRate += 1.0f;
         }
     }
     
     IEnumerable Spawn()
     {
         spawnTimer += Time.deltaTime;
         if(spawnTimer > spawnRate) {
             for(int i = 0; i < numberOfEnemy; i++) {
                 Instantiate(this.enemy);
             }
             spawnTimer = 0.0f;
         }
     }
 }
I like your method but when i try to use it I get an error 'Spawn.Speed()': not all code paths return a value
i added yield return for all the variables in spawn() and speed(), but only the first 2 enemy's spawn and if spawnRate is higher then 0 they don't spawn at all?
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                