Problem with spawning script

Hi im working on a game which spawns obstacles the player has to jump through. i couldnt find an of these problems online so i decided to ask here. The problem is that the obstacles spawn higher then the ground that i’ve made.

I also have a problem with the same obstacle spawning up to (x) times in a row, i want it so that the obstacles doesnt spawn twice in a row. this is the script im using so far.

using UnityEngine;
using System.Collections;

public class SpawnScript : MonoBehaviour {

	
	public GameObject[] obj;
	public float spawnMin = 1f;
	public float spawnMax = 2f;
	
	// Use this for initialization
	void Start () {
		Spawn();
	}
	
	void Spawn()
	{
		Instantiate(obj[Random.Range (0, obj.GetLength(0))], transform.position, Quaternion.identity);
		Invoke ("Spawn", Random.Range (spawnMin, spawnMax));
	}
}

If there is a tutorial on this it would be much appreciated. Thank you for your help

You need to keep a reference to the previously spawned Obstacle so that when you want to Instantiate a new one, you can check that the new Obstacle is not the same as the previous one.

private int previousObstacleIndex = -1; //Not 0 so we dont discount the first Array Element.
private int currentObstacleIndex;

void Spawn()
{
    currentObstacleIndex = Random.Range(0, obj.GetLength(0));

    if (previousObstacleIndex != currentObstacleIndex)
    {
        Instantiate(obj[currentObstacleIndex], transform.position, Quaternion.identity);
        previousObstacleIndex = currentObstacleIndex;
    }

    Invoke("Spawn", Random.Range(spawnMin, spawnMax));
}