I am currently working on a 2d endless runner. when i generate platforms, i randomly decide if there is a coin on the platform and if there’s an obstacle, then i calculate where they are above the platform. If both a coin and obstacle are instantiated, how would i make sure they aren’t instantiated on each other?

Instantiate your obstacle at a random point, then Instantiate the coin at a random point. Check if the coin intersects with the obstacle. If not then you’re done, else you wanna pick a new random position and repeat the check until you find a position that’s free.

Something like this in code:

```
public GameObject coin = null;
public GameObject obstacle = null;
void Start()
{
GameObject obstacleInstance = null;
// Decide if we want an obstacle
if(Random.value < 0.5f){
Vector3 position = Vector3.zero; // Add your logic tp Calculate a new position here
obstacleInstance = (GameObject)Instantiate(obstacle, position, Quaternion.identity); // Instantiate obstacle at calculated position
}
// Decide if we want a coin
if(Random.value > 0.5f){
// Create a coin at a random position
Vector3 position = Vector3.zero; // Add your logic to Calculate a new position here
GameObject coinInstance = (GameObject)Instantiate(coin, position, Quaternion.identity);
if(obstacleInstance){
// If there is an obstacle calculate a new position until the objects don't intersect
while (coinInstance.renderer.bounds.Intersects(obstacleInstance.renderer.bounds)) {
position = Vector3.zero; // Add your logic to Calculate a new position here
coinInstance.transform.position = position;
}
}
}
}
```

you can use random.range too make it spawn a different Gameobject and location.