LeeMace

Enemy Wave & Boss Spawner

Feb 6th, 2023
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.96 KB | Gaming | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class SpawnManager : MonoBehaviour
  6. {
  7.     public GameObject[] enemyPrefab;
  8.     public GameObject[] powerupPrefabs;
  9.  
  10.     private float spawnRange = 9;
  11.  
  12.     public int enemyCount;
  13.     public int waveNumber = 1;
  14.  
  15.     //boss variables
  16.     public GameObject bossPrefab;
  17.     public GameObject[] miniEnemyPrefabs;
  18.     public int bossRound;
  19.  
  20.     void Start()
  21.     {//calls the spawns enemy method and number of enemies to spawn and spawns powerups
  22.         int randomPowerup = Random.Range(0, powerupPrefabs.Length);
  23.         Instantiate(powerupPrefabs[randomPowerup], GenerateSpawnPosition(), powerupPrefabs[randomPowerup].transform.rotation);
  24.         SpawnEnemyWave(waveNumber);
  25.  
  26.     }
  27.  
  28.     // Update is called once per frame
  29.     void Update()
  30.     {
  31.         enemyCount = FindObjectsOfType<Enemy>().Length;
  32.         if (enemyCount == 0)
  33.         {
  34.             SpawnEnemyWave(waveNumber);
  35.             waveNumber++;
  36.             if (waveNumber % bossRound == 0)
  37.             {
  38.                 SpawnBossWave(waveNumber);
  39.             }
  40.             else
  41.             {
  42.                 SpawnEnemyWave(waveNumber);
  43.             }
  44.             int randomPowerup = Random.Range(0, powerupPrefabs.Length);
  45.             Instantiate(powerupPrefabs[randomPowerup], GenerateSpawnPosition(), powerupPrefabs[randomPowerup].transform.rotation);
  46.         }
  47.     }
  48.     //makes rando spawn pos
  49.     private Vector3 GenerateSpawnPosition()
  50.     {
  51.         float spawnPosX = Random.Range(-spawnRange, spawnRange);
  52.         float spawnPosZ = Random.Range(-spawnRange, spawnRange);
  53.         Vector3 randomPos = new Vector3(spawnPosX, 1, spawnPosZ);
  54.         return randomPos;
  55.     }
  56.  
  57.    void SpawnBossWave(int currentRound)
  58.     {
  59.         int miniEnemysToSpawn;
  60.         //we don't want to divide by 0
  61.         if (bossRound != 0)
  62.         {
  63.             miniEnemysToSpawn = currentRound / bossRound;
  64.         }
  65.         else
  66.         {
  67.             miniEnemysToSpawn = 1;
  68.         }
  69.  
  70.         var boss = Instantiate(bossPrefab, GenerateSpawnPosition(), bossPrefab.transform.rotation);
  71.         boss.GetComponent<Enemy>().miniEnemySpawnCount = miniEnemysToSpawn;
  72.     }
  73.  
  74.     public void SpawnMiniEnemy (int amount)
  75.     {
  76.         for(int i = 0; i < amount; i++)
  77.         {
  78.             int randomMini = Random.Range(0, miniEnemyPrefabs.Length);
  79.             Instantiate(miniEnemyPrefabs[randomMini], GenerateSpawnPosition(), miniEnemyPrefabs[randomMini].transform.rotation);
  80.         }
  81.     }
  82.     //spawns enemies increasing by one each wave
  83.     void SpawnEnemyWave(int enemiesToSpawn)
  84. {
  85.     for (int i = 0; i < enemiesToSpawn; i++)
  86.     {
  87.         // Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation);
  88.         int randomEnemy = Random.Range(0, enemyPrefab.Length);
  89.         Instantiate(enemyPrefab[randomEnemy], GenerateSpawnPosition(), enemyPrefab[randomEnemy].transform.rotation);
  90.     }
  91. }
  92. }
Add Comment
Please, Sign In to add comment