Spawn Prefabs Without Overlap C#

Hello, I’ve been working on a project for the past few weeks and wanted to add a new mechanic. This is essentially a road block.

What I have so far: 2 Road Blocks spawn at random (at pre-determined spawn points, of which there are 9). After a set amount of time they are destroyed and a new pair spawn immediately (for testing purposes, they spawn, destroy and respawn all in the space of 2 seconds or so).

The problem: there is a chance, albeit a small chance, that the blocks spawn on top of each other. I have had some help from friends, however, it isn’t quite working out the way I wanted.

I have gone back to square one where all the code I have is spawning the blocks, destroying the blocks and then respawning the blocks, so I just need to add the part where they can’t overlap.

 public GameObject Block;
    public Transform[] SpawnPoint;

    private int SpawnRate;
    private int SpawnTimer;

    void Start()
    {
        SpawnRate = 120;
        SpawnTimer = 0;
        NewBlock ();
        NewBlock2 ();
    }

    void Update ()
    {
        SpawnTimer = SpawnTimer + 1;
        if (SpawnTimer >= SpawnRate)
        {
            NewBlock ();
            NewBlock2 ();
            SpawnTimer = 0;
        }
    }

    public void NewBlock ()
    {
        int spawnPointIndex = Random.Range(0, SpawnPoint.Length);
        Instantiate(Block, SpawnPoint[spawnPointIndex].position, SpawnPoint[spawnPointIndex].rotation);
    }

    public void NewBlock2 ()
    {
        int spawnPointIndex = Random.Range(0, SpawnPoint.Length);
        Instantiate(Block, SpawnPoint[spawnPointIndex].position, SpawnPoint[spawnPointIndex].rotation);
    }

That is the code for spawning the Road Blocks.

void Start()
    {

    }

    void Update()
    {
        Destroy(this.gameObject, 2.0f);
    }

And that is the code to destroy the Road Blocks.

Any help is greatly appreciated and thank you in advance.

int alreadyUsed = -1;
public void NewBlock ()
{
int spawnPointIndex = Random.Range(0, SpawnPoint.Length);
alreadyUsed = spawnPointIndex;
Instantiate(Block, SpawnPoint[spawnPointIndex].position, SpawnPoint[spawnPointIndex].rotation);
}

public void NewBlock2 ()
{
    int spawnPointIndex = alreadyUsed;
    do
    {
        spawnPointIndex = Random.Range(0, SpawnPoint.Length);
    } while (spawnPointIndex == alreadyUsed);
    Instantiate(Block, SpawnPoint[spawnPointIndex].position, SpawnPoint[spawnPointIndex].rotation);
}

You have to use first NewBlock1() and then NewBlock2().