- Home /
How to make no spawning gap?
The spawning gap keeps on getting bigger and bigger how can i stop this, also how can i make this spawn one by one?
using UnityEngine;
using System.Collections.Generic;
public class PlatformManager:MonoBehaviour
{
public Transform prefab;
public int numberOfObjects;
public float recycleOffset;
public Vector3 minSize, maxSize, minGap, maxGap;
public float minY, maxY;
private Vector3 nextPosition;
private Queue < Transform > objectQueue;
void Start ()
{
objectQueue = new Queue < Transform > (numberOfObjects);
for (int i = 0; i < numberOfObjects; i++)
{
objectQueue.Enqueue ((Transform) Instantiate (prefab));
}
nextPosition = transform.localPosition;
for (int i = 0; i < numberOfObjects; i++) {
Recycle ();
}
}
public int maxNumberOfObjects = 40; //Or whatever
public float spawnDelay = 10f; //Delay between new ones
float lastTime = 0;
void Update ()
{
if (objectQueue.Count < maxNumberOfObjects
&& Time.time - lastTime > spawnDelay) {
lastTime = Time.time;
objectQueue.Enqueue ((Transform) Instantiate (prefab));
}
if (objectQueue.Peek () == null) {
Transform newOne;
objectQueue.Dequeue ();
objectQueue.Enqueue (newOne = (Transform) Instantiate (prefab));
newOne.gameObject.SetActiveRecursively (false);
nextPosition = transform.localPosition;
}
if (objectQueue.Peek ().gameObject.active == false ||
objectQueue.Peek ().localPosition.x + recycleOffset <
Runner.distanceTraveled) {
Recycle ();
}
}
private void Recycle ()
{
Vector3 scale = new Vector3 (Random.Range (minSize.x, maxSize.x),
Random.Range (minSize.y, maxSize.y),
Random.Range (minSize.z, maxSize.z));
Vector3 position = nextPosition;
position.x += scale.x * 0.5f;
position.y += scale.y * 0.5f;
Transform o = objectQueue.Dequeue ();
o.localScale = scale;
o.localPosition = position;
objectQueue.Enqueue (o);
nextPosition +=
new Vector3 (Random.Range (minGap.x, maxGap.x) + scale.x,
Random.Range (minGap.y, maxGap.y),
Random.Range (minGap.z, maxGap.z));
if (nextPosition.y < minY) {
nextPosition.y = minY + maxGap.y;
}
else if (nextPosition.y > maxY) {
nextPosition.y = maxY - maxGap.y;
}
}
}
So how can i stop this gap it is making when it spawns and the recycles. can it spawn one by one always?
Please stop bumping your questions every 10 $$anonymous$$utes. Please stop bumping your questions at all. It won't make people anymore inclined to help you.
Also, you shouldn't flood Unity Answers with so many almost-identical version of your question, each containing a script dump a normal person would take an hour to even understand, especially since you're not even explaining what the script does in detail.
Use the time while you are waiting for answers to try to understand what each part of your code actually does, it might help you figure out what's wrong with it for yourself, and you'll learn a lot. Also, learn to indent your code correctly, it makes it so much easier to follow, and to understand what's going on. Compare the code in this question, which I just edited and fixed with an auto-indent-tool, to the equivalent code of one of your other questions, such as http://answers.unity3d.com/questions/268278/how-can-i-get-this-to-spawn-all-the-time.html
Which one is easier to understand?
This code is totally ridiculous SEEING AS YOU HAVE INSTANTIATES IN UPDATE() AND IN START()! This problem requires you to use a Corountine. I'm not gonna fix this code...
Answer by Owen-Reynolds · Jun 19, 2012 at 05:15 AM
Not sure if there are some other issues, but glancing at the spawn routine (`Recycle`,) it rolls dice for how large and far apart they are, so of course there are irregular gaps.
I'm assuming you didn't forgot that you used Random, and instead got this code from somewhere. See if you can look around there for an explanation.
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Generate obstacles within boundry 1 Answer
How do i get this to spawn over time? 1 Answer
I am having spawning problems. 2 Answers
Spawn Script not working on iPhone? 0 Answers