- Home /
Spawn objects in burst of three?
Hey everyone, so I'm going to have a boss level and I want it to shoot once but in bursts of three. Similar to that of a burst gun in FPS games. I want the boss (enemy) to spawn three shots in like a second and then wait like 5 seconds and do it again. I have it so that it spawns once every five seconds, but I don't know how to get it to due bursts of three or more. My the script spawns only one object every five seconds right now. Below is what I have so far for my spawning script to spawn one thing every five seconds. Thanks for any and all help. My game is in 2D by the way, if that matters. PS: I think that I have to use a courotine or the IEnumerator thing, but I'm not really familiar with that. Thanks using UnityEngine; using System.Collections;
public class Spawner : MonoBehaviour { public float spawnTime = 5f; // The amount of time between each spawn. public float spawnDelay = 3f; // The amount of time before spawning starts. public GameObject[] enemies; // Array of enemy prefabs.
void Start ()
{
// Start calling the Spawn function repeatedly after a delay .
InvokeRepeating("Spawn", spawnDelay, spawnTime);
}
void Spawn ()
{
// Instantiate a random enemy.
int enemyIndex = Random.Range(0, enemies.Length);
Instantiate(enemies[enemyIndex], transform.position, transform.rotation);
// Play the spawning effect from all of the particle systems.
foreach(ParticleSystem p in GetComponentsInChildren<ParticleSystem>())
{
p.Play();
}
}
}
Answer by SkaredCreations · Mar 08, 2018 at 07:20 PM
You can use a coroutine (note that I've added "spawnCount" property to your class to set how many instances you want to spawn):
using System.Collections;
using UnityEngine;
public class Spawner : MonoBehaviour
{
public int spawnCount = 3; // The number of spawned objects.
public float spawnTime = 5f; // The amount of time between each spawn.
public float spawnDelay = 3f; // The amount of time before spawning starts.
public GameObject[] enemies; // Array of enemy prefabs.
void Start()
{
// Start calling the Spawn function repeatedly after a delay .
StartCoroutine(Spawn());
}
void OnDestroy()
{
StopAllCoroutines();
}
IEnumerator Spawn()
{
// Initial delay
yield return new WaitForSeconds(spawnDelay);
while (true)
{
// Calculate how much it should wait to spawn the instances in 1s
float waitForNext = 1f / spawnCount;
for (int i = 0; i < spawnCount; i++)
{
// Instantiate a random enemy.
int enemyIndex = Random.Range(0, enemies.Length);
Instantiate(enemies[enemyIndex], transform.position, transform.rotation);
// Wait for the next instance spawn
yield return new WaitForSeconds(waitForNext);
}
// Play the spawning effect from all of the particle systems.
foreach (ParticleSystem p in GetComponentsInChildren<ParticleSystem>())
{
p.Play();
}
// Wait for the next cycle of spawns
yield return new WaitForSeconds(spawnTime);
}
}
}
Your answer
Follow this Question
Related Questions
spawn timer problem 2 Answers
How to have IEnumerators run but not in Update 2 Answers
Enemy spawning problem... 0 Answers
3rd person controller in c#? 1 Answer
making a 2D character Speak for different lenghts of time 2 Answers