How do I make the enemies spawn with increasing difficulty?
Hi guys!
I am experimenting with one tutorial games provided by Unity: Survival Shooter https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial and I am trying to get the enemies to spawn with increasing difficulty, e.g when all enemies are dead, the next wave will spawn one more enemies than the last.
I have implemented Corrupter heart's enemy spawner successfully however am unable to figure out how to solve this issue.
The script I am using is below:
 // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Filename: Spawner.cs
 //  
 // Author: Garth "Corrupted Heart" de Wet <mydeathofme[at]gmail[dot]com>
 // Website: www.CorruptedHeart.co.cc
 // 
 // Copyright (c) 2010 Garth "Corrupted Heart" de Wet
 //  
 // Permission is hereby granted, free of charge (a donation is welcome at my website), to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
 // in the Software without restriction, including without limitation the rights
 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 // copies of the Software, and to permit persons to whom the Software is
 // furnished to do so, subject to the following conditions:
 // 
 // The above copyright notice and this permission notice shall be included in
 // all copies or substantial portions of the Software.
 // 
 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 // THE SOFTWARE.
 // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class Spawner : MonoBehaviour
 {
     // Color of the gizmo
     public Color gizmoColor = Color.red;
 
     //-----------------------------------
     // All the Enums
     //-----------------------------------
     // Spawn types
     public enum SpawnTypes
     {
         //Normal,
         //Once,
         //Wave,
         TimedWave
     }
     // The different Enemy levels
     public enum EnemyLevels
     {
         Easy,
         //Medium,
         Hard,
         //Boss
     }
     //---------------------------------
     // End of the Enums
     //---------------------------------
 
     // Enemy level to be spawnedEnemy
     public EnemyLevels enemyLevel = EnemyLevels.Easy;
 
     //----------------------------------
     // Enemy Prefabs
     //----------------------------------
     public GameObject EasyEnemy;
     //public GameObject MediumEnemy;
     public GameObject HardEnemy;
     //public GameObject BossEnemy;
     private Dictionary<EnemyLevels, GameObject> Enemies = new Dictionary<EnemyLevels, GameObject>(4);
   
     //----------------------------------
     // End of Enemy Prefabs
     //----------------------------------
 
     //----------------------------------
     // Enemies and how many have been created and how many are to be created
     //----------------------------------
     public int totalEnemy = 10;
     private int numEnemy = 0;
     private int spawnedEnemy = 0;
     public PlayerHealth playerHealth;
     public Transform[] spawnPoints;
     //----------------------------------
     // End of Enemy Settings
     //----------------------------------
 
 
     // The ID of the spawner
     private int SpawnID;
 
     //----------------------------------
     // Different Spawn states and ways of doing them
     //----------------------------------
     private bool waveSpawn = false;
     public bool Spawn = true;
     public SpawnTypes spawnType = SpawnTypes.TimedWave;
     // timed wave controls
     public float waveTimer = 30.0f;
     private float timeTillWave = 0.0f;
     //Wave controls
     public int totalWaves = 5;
     private int numWaves = 0;
     //----------------------------------
     // End of Different Spawn states and ways of doing them
     //----------------------------------
     void Start()
     {
         // sets a random number for the id of the spawner
         SpawnID = Random.Range(1, 500);
         Enemies.Add(EnemyLevels.Easy, EasyEnemy);
         //Enemies.Add(EnemyLevels.Boss, BossEnemy);
         //Enemies.Add(EnemyLevels.Medium, MediumEnemy);
         Enemies.Add(EnemyLevels.Hard, HardEnemy);
     }
     // Draws a cube to show where the spawn point is... Useful if you don't have a object that show the spawn point
     void OnDrawGizmos()
     {
         // Sets the color to red
         Gizmos.color = gizmoColor;
         //draws a small cube at the location of the gam object that the script is attached to
         Gizmos.DrawCube(transform.position, new Vector3(0.5f, 0.5f, 0.5f));
     }
     void Update()
     {
         if (Spawn)
         {
 
             // Spawns enemies in waves but based on time.
             if (spawnType == SpawnTypes.TimedWave)
             {
                 // checks if the number of waves is bigger than the total waves
                 if (numWaves <= totalWaves)
                 {
                     // Increases the timer to allow the timed waves to work
                     timeTillWave += Time.deltaTime;
                     if (waveSpawn)
                     {
                         //spawns an enemy
                         spawnEnemy();
                     }
                     // checks if the time is equal to the time required for a new wave
                     if (timeTillWave >= waveTimer)
                     {
                         // enables the wave spawner
                         waveSpawn = true;
                         // sets the time back to zero
                         timeTillWave = 0.0f;
                         // increases the number of waves
                         numWaves++;
                         // A hack to get it to spawn the same number of enemies regardless of how many have been killed
                         numEnemy = 0;
                     }
                     if (numEnemy >= totalEnemy)
                     {
                         // diables the wave spawner
                         waveSpawn = false;
                     }
                 }
                 else
                 {
                     Spawn = false;
                 }
             }
         }
     }
     // spawns an enemy based on the enemy level that you selected
     private void spawnEnemy()
     {
         // Find a random index between zero and one less than the number of spawn points.
         int spawnPointIndex = Random.Range(0, spawnPoints.Length);
         // Spawns Enemies in the positions the spawn points have been placed
         GameObject Enemy = (GameObject)Instantiate(Enemies[enemyLevel], spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
         // Increase the total number of enemies spawned and the number of spawned enemies
         numEnemy++;
         spawnedEnemy++;
 
         // If the player has no health left...
         if (playerHealth.currentHealth <= 0f)
         {
             // ... exit the function.
             return;
         }
     }
     // Call this function from the enemy when it "dies" to remove an enemy count
     public void killEnemy(int sID)
     {
         // if the enemy's spawnId is equal to this spawnersID then remove an enemy count
         if (SpawnID == sID)
         {
             numEnemy--;
         }
     }
     //enable the spawner based on spawnerID
     public void enableSpawner(int sID)
     {
         if (SpawnID == sID)
         {
             Spawn = true;
         }
     }
     //disable the spawner based on spawnerID
     public void disableSpawner(int sID)
     {
         if (SpawnID == sID)
         {
             Spawn = false;
         }
     }
     // returns the Time Till the Next Wave, for a interface, ect.
     public float TimeTillWave
     {
         get
         {
             return timeTillWave;
         }
     }
     // Enable the spawner, useful for trigger events because you don't know the spawner's ID.
     public void enableTrigger()
     {
         Spawn = true;
     }
 }
 
              
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
2D Game Kit Enemies 0 Answers
Trouble With Creating A Collection of Enemy Prefabs and Spawning Them 0 Answers
Resetting the level without changing variables 0 Answers
Multiple enemies and no animations 0 Answers