Спавн объектов так, чтобы они не пересекались
У меня есть набор префабов, которые я хочу спавнить в комнате так, чтобы они не пересекались. Написал следующий код:
void SpawnObstacle() {
var index = Random.Range(0, _obstacles.Length);
for (int i = 0; i < 10; i++) {
var newPos = new Vector2(Random.Range(minX, maxX), Random.Range(minY, maxY));
if (CheckPos(_obstacles[index].GetComponent<Wall>(), newPos)) {
var obj = Instantiate(_obstacles[index]);
obj.transform.position = newPos;
Debug.Log("Object " + _obstacles[index] + " on " + newPos);
break;
}
}
}
bool CheckPos(Wall wall, Vector2 pos) {
wall.CalculateSize();
Vector2 topRight = new Vector2(pos.x + wall.xSize / 2, pos.y + wall.ySize / 2);
Vector2 bottomLeft = new Vector2(pos.x - wall.xSize / 2, pos.y - wall.ySize / 2);
var collider = Physics2D.OverlapArea(topRight, bottomLeft);
Debug.Log(collider);
if (collider != null) {
return false;
}
return true;
}
Класс Wall:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Wall : MonoBehaviour
{
public float xSize = 0.0f;
public float ySize = 0.0f;
public void CalculateSize() {
xSize = GetComponent<BoxCollider2D>().size.x;
ySize = GetComponent<BoxCollider2D>().size.y;
}
}
Однако всё равно объекты пересекаются. Потыкался и заметил, что Physics2D.OverlapArea не всегда будто бы выдаёт нужный результат. Что делать? Где ошибка?