Spawning Bug.
Okay I have a game which involves spawning. My spawn points are both left and right. I have this wave that spawns once "delay" is completed. I am spawning moving object that does get destroyed. (which I am trying to do) At first it seems nice, no problems but after a few minutes (2 mins) it suddenly starts spawn 1000 upon 1000's of my moving objects. How would I stop this!!! I think it may be because I haven't got a destroy script, to destroy the moving objects, but I'm no genius! Please if anyone can help it would be much appreciated. Thank you!!! Here's my script:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[System.Serializable]
public class WaveAction
{
public string name;
public float delay;
public Transform prefab;
public int spawnCount;
public string message;
}
[System.Serializable]
public class Wave
{
public string name;
public List<WaveAction> actions;
}
public class WaveGenerator : MonoBehaviour
{
public float difficultyFactor = 0.9f;
public List<Wave> waves;
private Wave m_CurrentWave;
public Wave CurrentWave { get {return m_CurrentWave;} }
private float m_DelayFactor = 1.0f;
public GameObject ObjectToSpawn;
IEnumerator SpawnLoop()
{
m_DelayFactor = 1.0f;
while(true)
{
foreach(Wave W in waves)
{
m_CurrentWave = W;
foreach(WaveAction A in W.actions)
{
if(A.delay > 0)
yield return new WaitForSeconds(A.delay * m_DelayFactor);
if (A.message != "")
{
// TODO: print ingame message
}
if (A.prefab != null && A.spawnCount > 0)
{
for(int i = 0; i < A.spawnCount; i++)
{
// Random position within this transform
Vector3 rndPosWithin;
rndPosWithin = new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f));
rndPosWithin = transform.TransformPoint(rndPosWithin * .5f);
Instantiate(ObjectToSpawn, rndPosWithin, transform.rotation);
}
}
}
yield return null; // prevents crash if all delays are 0
}
m_DelayFactor *= difficultyFactor;
yield return null; // prevents crash if all delays are 0
}
}
void Start()
{
StartCoroutine(SpawnLoop());
}
}
Answer by Inok · Oct 06, 2015 at 07:37 PM
Ok looks like i know what is wrong: look at this line "m_DelayFactor *= difficultyFactor;" you multiply initial delay (1.0f) with difficculty factor (0.9), each "round" your delay becomes lower and lower with more speed because you multiply by less then 1. So problem in calculation of delay lowering.
@Inok could you please notify me as soon as possible
Your answer
Follow this Question
Related Questions
Can sb help? Artifact with terrain or another objects 0 Answers
Problem of basic shader in unity help pls 0 Answers
How to add a wave in my spawn script 1 Answer
Spawning bug problem 1 Answer
Wave spawner script 2 Answers