WaveSpawnerCode
unknown
plain_text
2 years ago
2.5 kB
5
Indexable
using System.Collections; using System.Collections.Generic; using UnityEngine; public class WaveSpawner : MonoBehaviour { public List<Enemy> enemies = new List<Enemy>(); public int currWave; public int WaveValue; public List<GameObject> enimesToSpawn = new List<GameObject>(); public List<GameObject> EnimesToKill = new List<GameObject>(); public Transform SpawnLocation; public int WaveDuration; private float WaveTimer; public float SpawnInterval; private float SpawnTimer; void Start() { GenerateWave(); } private void Update() { if(EnimesToKill.Count == 0) { currWave += 1; } } // Update is called once per frame void FixedUpdate() { if(SpawnTimer <= 0f) { if(enimesToSpawn.Count > 0) { Instantiate(enimesToSpawn[0], SpawnLocation.position, Quaternion.identity); EnimesToKill.Add(enimesToSpawn[0].gameObject); enimesToSpawn.RemoveAt(0); SpawnTimer = SpawnInterval; } else { WaveTimer = 0; } } else { SpawnTimer -= Time.fixedDeltaTime; WaveTimer -= Time.fixedDeltaTime; } } public void GenerateWave() { WaveValue = currWave * 10; GenerateEnemies(); SpawnInterval = WaveDuration / enimesToSpawn.Count; WaveTimer = WaveDuration; } public void GenerateEnemies() { List<GameObject> GeneratedEnimes = new List<GameObject>(); while(WaveValue > 0) { int randomEnemy = Random.Range(0, enemies.Count); int RandEnemyCost = enemies[randomEnemy].Cost; if(WaveValue - RandEnemyCost >= 0) { GeneratedEnimes.Add(enemies[randomEnemy].EnemyPrefab); WaveValue -= RandEnemyCost; } else { if(WaveValue - RandEnemyCost <= 0) { break; } } } enimesToSpawn.Clear(); enimesToSpawn = GeneratedEnimes; } } [System.Serializable ] public class Enemy { public GameObject EnemyPrefab; public int Cost; }
Editor is loading...