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;

        coins.SpawnIfAvailable(position);
        coin2.SpawnIfAvailable(position);
        coin3.SpawnIfAvailable(position);
        coin4.SpawnIfAvailable(position);
        coin5.SpawnIfAvailable(position);

        spikeTrap.SpawnIfAvailable(position);
        spikeTrap2.SpawnIfAvailable(position);
        spikeTrap3.SpawnIfAvailable(position);

        speedUp.SpawnIfAvailable(position);
        speedUp2.SpawnIfAvailable(position);
        speedUp3.SpawnIfAvailable(position);

        speedDown.SpawnIfAvailable(position);
        speedDown2.SpawnIfAvailable(position);
        speedDown3.SpawnIfAvailable(position);

        inverse.SpawnIfAvailable(position);
        inverse2.SpawnIfAvailable(position);


        Transform o = objectQueue.Dequeue();

        o.localScale    = scale;
        o.localPosition = position;
        int materialIndex = Random.Range(0, materials.Length);

        o.GetComponent <Renderer>().material = materials[materialIndex];
        objectQueue.Enqueue(o);

        nextPosition += new Vector3(
            Random.Range(minGap.x, maxGap.x) + scale.x,
            Random.Range(minGap.y, maxGap.y),
            Random.Range(0, 0));

        if (nextPosition.y < minY)
        {
            nextPosition.y = minY + maxGap.y;
        }
        else if (nextPosition.y > maxY)
        {
            nextPosition.y = maxY - maxGap.y;
        }
    }