Я пытаюсь использовать overlapSphere, чтобы определить, содержит ли плитка на карте плиток игровой объект. Затем, если плитка еще не занята, в этой плитке будет создан новый игровой объект (если соблюдены некоторые другие условия). Я пытаюсь предотвратить наложение игровых объектов друг на друга. Однако у меня возникают проблемы с центрированием сфер вокруг правильного местоположения.
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
Vector3 tilePos = tileMap.GetCellCenterWorld(new Vector3Int(x, y, 0));
if (terrainMap[x, y] == blocked)
{
bool spawn = detectOverlap(tilePos, obstCheckRad);
if (spawn)
{
GameObject obstacle = Instantiate(obstaclePrefab) as GameObject;
obstacle.transform.position = tilePos;
obstacle.transform.eulerAngles = new Vector3(0, 0, (Random.Range(0, 359)));
}
}
}
}
}
public bool detectOverlap (Vector3 center, float radius)
{
Collider[] collider = Physics.OverlapSphere(center, radius);
if (collider.Length == 0)
{
return true;
}
else
{
return false;
}
}
Я использую «GetCellCenterWorld» в качестве центра моих перекрывающихся сфер, однако они, кажется, всегда начинаются в нижнем левом углу карты, в результате чего эта область карты становится полностью пустой, и объекты, которые находятся на карте, все еще накладываются друг на друга. (см. изображение)
Моя путаница основана на том факте, что я использую тот же вектор3 (tilePos) для размещения игровых объектов. Все объекты перемещены в правильное положение, однако перекрывающиеся сферы остаются слева внизу.