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;
        }
    }
}

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.