using System.Collections; using System.Collections.Generic; using UnityEngine; public class Spawner : MonoBehaviour { // Reference to the Prefab to Spawn [SerializeField] private GameObject objectToSpawn; // Time interval between spawns public float spawnInterval = 1f; [SerializeField] private int maxAlive = 0; [SerializeField] private bool spawnOnStart = true; [SerializeField] private bool repeatSpawns = true; private readonly List spawned = new List(); private void OnEnable() { if (spawnOnStart) { SpawnOnce(); } } void Start() { if (repeatSpawns) { // Start the spawning process using a Coroutine StartCoroutine(SpawnRoutine()); } } private IEnumerator SpawnRoutine() { // Infinite loop to keep spawning (can be modified) while (true) { // Wait for the specified interval yield return new WaitForSeconds(spawnInterval); if (objectToSpawn == null) { continue; } if (maxAlive > 0 && CountAlive() >= maxAlive) { continue; } SpawnOnce(); } } private void SpawnOnce() { if (objectToSpawn == null) { return; } if (maxAlive > 0 && CountAlive() >= maxAlive) { return; } var instance = Instantiate(objectToSpawn, transform.position, Quaternion.identity); spawned.Add(instance); } private int CountAlive() { for (var i = spawned.Count - 1; i >= 0; i--) { if (spawned[i] == null) { spawned.RemoveAt(i); } } return spawned.Count; } }