- Home /
How to stop spawning after a certain time?,How to stop enemy spawn after a specific time?
Hi, i would like to stop spawning after a specific time, how should i do this? Thanks for any help, below is my code which works:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class AttackerSpawner : MonoBehaviour {
[SerializeField] float minSpawnDelay = 1f;
[SerializeField] float maxSpawnDelay = 5f;
[SerializeField] Attacker[] attackerPrefabArray;
[SerializeField] float spawnerDelay = 1f;
bool spawn = true;
IEnumerator Start()
{
yield return new WaitForSeconds(spawnerDelay);
while (spawn)
{
yield return new WaitForSeconds(Random.Range(minSpawnDelay, maxSpawnDelay));
SpawnAttacker();
}
}
public void StopSpawning()
{
spawn = false;
}
private void SpawnAttacker()
{
var attackerIndex = Random.Range(0, attackerPrefabArray.Length);
Spawn(attackerPrefabArray[attackerIndex]);
}
private void Spawn(Attacker myAttacker)
{
Attacker newAttacker = Instantiate
(myAttacker, transform.position, transform.rotation)
as Attacker;
newAttacker.transform.parent = transform;
}
},Hi, I want to add in like time so that enemies stop spawning. Thanks!
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class AttackerSpawner : MonoBehaviour {
[SerializeField] float minSpawnDelay = 1f;
[SerializeField] float maxSpawnDelay = 5f;
[SerializeField] Attacker[] attackerPrefabArray;
[SerializeField] float spawnerDelay = 1f;
bool spawn = true;
IEnumerator Start()
{
yield return new WaitForSeconds(spawnerDelay);
while (spawn)
{
yield return new WaitForSeconds(Random.Range(minSpawnDelay, maxSpawnDelay));
SpawnAttacker();
}
}
public void StopSpawning()
{
spawn = false;
}
private void SpawnAttacker()
{
var attackerIndex = Random.Range(0, attackerPrefabArray.Length);
Spawn(attackerPrefabArray[attackerIndex]);
}
private void Spawn(Attacker myAttacker)
{
Attacker newAttacker = Instantiate
(myAttacker, transform.position, transform.rotation)
as Attacker;
newAttacker.transform.parent = transform;
}
}
Comment
Answer by PolyvivalStudios · Jan 27, 2019 at 04:02 PM
Do something like this: using System.Collections; using System.Collections.Generic; using UnityEngine;
public class AttackerSpawner : MonoBehaviour
{
[SerializeField] float minSpawnDelay = 1f;
[SerializeField] float maxSpawnDelay = 5f;
[SerializeField] Attacker[] attackerPrefabArray;
[SerializeField] float spawnerDelay = 1f;
[SerializeField] float timeToWait = 10f;
private float timer;
bool spawn = true;
IEnumerator Start()
{
timer = Time.time + timeToWait;
yield return new WaitForSeconds(spawnerDelay);
while (spawn)
{
yield return new WaitForSeconds(Random.Range(minSpawnDelay, maxSpawnDelay));
SpawnAttacker();
}
}
public void Update()
{
if (Time.time > timer)
{
StopSpawning();
}
}
public void StopSpawning()
{
spawn = false;
}
private void SpawnAttacker()
{
var attackerIndex = Random.Range(0, attackerPrefabArray.Length);
Spawn(attackerPrefabArray[attackerIndex]);
}
private void Spawn(Attacker myAttacker)
{
Attacker newAttacker = Instantiate
(myAttacker, transform.position, transform.rotation)
as Attacker;
newAttacker.transform.parent = transform;
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612190541im_/https://answers.unity.com/themes/thub/images/avi.jpg)