# Gap between two 3D objects in Unity

Quick question related to Unity: if I have two objects (A and B) to create some tunnel, how can I make a constant gap? I thought of having A and B instantiated with a random value to start with; however, it will not be constant gap. So I was wondering what other ways are (as I'm reading now, there is Vector3.Distance method; but implementing it makes it a little bit more confusing). The idea is to have your player go through to this gap constant of object A and B.

Picture as an example: However, the gaps have inconsistencies because they are not clean. Sometimes there are really close together and the red ball cannot even go through (like the next image)

This is the code example that I have at this moment:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnManager : MonoBehaviour
{
public GameObject[] obstaclesPrefab;
private float startDelay = 2;
private float repeatRate = 2;
private PlayerControl playerControllerScript;
float gap = 4;
// Start is called before the first frame update
void Start()
{
playerControllerScript = GameObject.Find("Tomato").GetComponent<PlayerControl>();
InvokeRepeating("SpawnObstacle", startDelay, repeatRate);
}

// Update is called once per frame
void Update()
{

}
void SpawnObstacle()
{
int obstaclesIndex = Random.Range(0, obstaclesPrefab.Length);
float randomY = Random.Range(-1.0f, 2.0f);
float randomY2 = Random.Range(-1.0f, 2.0f);
Vector3 pipe = new Vector3(25, randomY * gap, -10);
Vector3 pipe2 = new Vector3(25, randomY2 * gap, -10);
float distance = Vector3.Distance(pipe2, pipe);
if (playerControllerScript.gameOver == false)
{
Instantiate(obstaclesPrefab[obstaclesIndex], pipe2, obstaclesPrefab[obstaclesIndex].transform.rotation);
Instantiate(obstaclesPrefab[obstaclesIndex], pipe, obstaclesPrefab[obstaclesIndex].transform.rotation);
}
}
}


I'm open to suggestions as I'm getting started with game development and learning too. Thank you for time and have a great day!

EDIT: Thank you DMGregory for such a simple solution and help. I was just tired and my brain was mush. This totally did the trick!

• Did you consider doing just one random roll for each pair of pipes, then adding a constant offset to get two positions from that single roll? Oct 16, 2022 at 17:33
• Well, I guess I was just tired. Your thought process helped me a lot and I was able to fix it :). I appreciate it a lot! Oct 16, 2022 at 18:34
• If you've solved your problem, be sure to post your solution as an Answer below. This can help future developers who are trying to solve similar problems. Oct 16, 2022 at 18:36

Thank you DMGregory for such a simple solution and help. I was just tired and my brain was mush. This totally did the trick!

Code example:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnManager : MonoBehaviour
{
public GameObject[] obstaclesPrefab;
private float startDelay = 2;
private float repeatRate = 2;
private PlayerControl playerControllerScript;
float gap = 7.0f;
// Start is called before the first frame update
void Start()
{
playerControllerScript = GameObject.Find("Tomato").GetComponent<PlayerControl>();
InvokeRepeating("SpawnObstacle", startDelay, repeatRate);
}

// Update is called once per frame
void Update()
{

}
void SpawnObstacle()
{
int obstaclesIndex = Random.Range(0, obstaclesPrefab.Length);
float randomY = Random.Range(-1.5f, 2.5f);
Vector3 randomHeight = new Vector3(25, randomY, -10); //CHANGED HERE
Vector3 randomHeight2 = new Vector3(25, randomY + gap, -10); //CHANGED HERE (I'm adding gap, not multiplying it)
float distance = Vector3.Distance(randomHeight, randomHeight2);
if (playerControllerScript.gameOver == false)
{
Instantiate(obstaclesPrefab[obstaclesIndex], randomHeight, obstaclesPrefab[obstaclesIndex].transform.rotation);
Instantiate(obstaclesPrefab[obstaclesIndex], randomHeight2, obstaclesPrefab[obstaclesIndex].transform.rotation);
}
}
}

• Right now this answer just says "thank you" — it does not show what you changed to solve the problem, so it won't be very helpful to future readers trying to solve the same problem. Don't worry about gratitude — worry about clearly sharing usable game development solutions. Oct 17, 2022 at 11:10
• Added, thank you :) Oct 17, 2022 at 14:37
• Code helps. Code plus an explanation of what you changed and why that solves the problem is even better. Oct 17, 2022 at 19:10
• Don't forget to mark this answer as "Accepted" if it solved your problem, by clicking the checkmark icon in the top left. Oct 19, 2022 at 18:52