Hi, I can spawn objects randomly but sometimes they overlapping. I want to spawn objects without overlapping how can I do it?
My spawn code:
public void StartGame() {
count = Random.Range(2, 6);
for(int i = 0; i < count; i++) {
float x = Random.Range(-2.0f, 2.0f);
float y = Random.Range(-4.0f, 4.0f);
Instantiate(enemy, new Vector3(x, y, 0), Quaternion.identity);
}
}
public void StartGame()
{
count = Random.Range(2, 6);
float enemyRadius = enemy.GetComponent().bounds.extents.x;
for (int i = 0; i < count; i++)
{
float x = Random.Range(-2.0f, 2.0f);
float y = Random.Range(-4.0f, 4.0f);
Vector2 spawnPoint = new Vector2(x, y);
//Assuming you are 2D
Collider2D CollisionWithEnemy = Physics2D.OverlapCircle(spawnPoint, enemyRadius, LayerMask.GetMask("EnemyLayer"));
//If the Collision is empty then, we can instantiate
if (CollisionWithEnemy == false)
Instantiate(enemy, new Vector3(x, y, 0), Quaternion.identity);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public GameObject enemy;
public float distanceBetweenObjects = 2f;
List<Vector3> points = new List<Vector3>();
void Start(){
ObjectPositioning();
ObjectSpawning();
}
void ObjectPositioning(){
int count = Random.Range(2, 6);
for(int i = 0; i < count;) {
float x = Random.Range(-2.0f, 2.0f);
float y = Random.Range(-4.0f, 4.0f);
Vector3 point = new Vector3(x, y, 0);
if (points.Count==0){
points.Add(point);
i++;
continue;
}
for(int j = 0; j < points.Count; j++){
if ((point-points[j]).sqrMagnitude > distanceBetweenObjects * distanceBetweenObjects){
if (j==points.Count-1){
points.Add(point);
i++;
}
continue;
}
break;
}
}
}
void ObjectSpawning(){
for (int i = 0; i < points.Count; i++){
Instantiate(enemy, points*, Quaternion.identity);*