- Home /
Advanced Wave Spawner.
Hi, how can I make different enemies spawn at certain spawnpoints, and not at random spawnpoints, as now in my script. Can I do it in wave spawner? For example rotating platforms spawn at (0,0,) and enemies at (10,10) and etc. Here's my current script if you need one:
 `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;
     private int nextWave = 0;
 
     public float timeBetweenWaves = 5f;
     private float waveCountdown;
     private SpawnState state = SpawnState.COUNTING;
     private float searchCountdown = 1f;  
     public Transform[] spawnPoints;
     void Start()
     {
         waveCountdown = timeBetweenWaves;
     }
     void Update()
     {
         if(state == SpawnState.WAITING)
         {
             if(!EnemyIsAlive())
             {
                WaveCompleted();
             }
             else
             {
                 return;
             }
         }
         if(waveCountdown <= 0)
         {
             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("Completed all waves! Looping");
      } else {
          nextWave++;
      }
      
 }
 bool EnemyIsAlive()
 {
     searchCountdown -= Time.deltaTime;
     if(searchCountdown <= 0f)
     {
         searchCountdown = 1f;
         if(GameObject.FindGameObjectsWithTag("Enemy") == null)
     {
         return false;
     }
     }
     return true;
 }
 IEnumerator SpawnWave (Wave _wave) //want to wate a certain amount of seconds in metod
 {
     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)
 {
     //SpawnEnemy
     Debug.Log("Spawning Enemy" +_enemy.name);
     Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length)];
     Instantiate (_enemy, _sp.position, _sp.rotation);
     
 }``
Answer by Aviryx · Aug 16, 2020 at 06:40 PM
Well you have a list of transforms for your spawn points.
 public Transform[] spawnPoints;
So you can get a list of spawn points.
 foreach (Transform spawnpoint in spawnPoints)
 {
     Debug.Log(spawnpoint);
 }
You could also specify a particular spawn point like this
 spawnPoints[0]
What you are currently doing is just spawning between spawn point 0 and the last spawn point.
 Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length)];
This means you would need to check for an enemy type, and if it matches, spawn it at your preferred locations.
 if (_enemy.name == "Enemy 1")
 {
     Transform _sp = spawnPoints[0];
 }
 else
 {
     Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length)];
 }
or maybe
 List<Transform> enemy1SpawnPoints = new List<Transform>();
 enemy1SpawnPoints.Add(spawnPoints[0]);
 enemy1SpawnPoints.Add(spawnPoints[4]);
 if (_enemy.name == "Enemy 1")
 {
     var result = enemy1SpawnPoints[Random.Range (0, enemy1SpawnPoints.Length)];
     Transform _sp = spawnPoints[result];
 }
 else
 {
     Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length)];
 }
Your answer
 
 
             Follow this Question
Related Questions
Question about Unet and spawning 0 Answers
Spawn object with time difference 2 Answers
Spawn Objects on Walkable Surfaces 1 Answer
How to increase the spawn rate of an object over time? 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                