Синтаксис:
Используется csharp
public bool IsClear()
{
Collider2D obstacle = Physics2D.OverlapCircle(transform.position, 0.2f, obstacleLayer);
if (obstacle != null)
{
return false;
}
else
{
return true;
}
}
После генерации поля начинаю спавн юнитов, при этом каждый раз для нового юнита вызываю функцию на "сборку" листа с тайлами, на которых он может заспауниться:
Синтаксис:
Используется csharp
private void spawnCheckForRed()
{
for (int i = 0; i < childCount; i++)
{
if (parent.transform.GetChild(i).GetComponent<Tile>().IsClear() && parent.transform.GetChild(i).transform.position.x == length - 1 || parent.transform.GetChild(i).transform.position.x == length - 2)
{
tilesForRed.Add(parent.transform.GetChild(i).gameObject);
}
}
}
{
for (int i = 0; i < childCount; i++)
{
if (parent.transform.GetChild(i).GetComponent<Tile>().IsClear() && parent.transform.GetChild(i).transform.position.x == length - 1 || parent.transform.GetChild(i).transform.position.x == length - 2)
{
tilesForRed.Add(parent.transform.GetChild(i).gameObject);
}
}
}
сhildCount - переменная содержащая в себе колво детей объекта поле, на котором висят все тайлы.
tilesForRed - лист с тайлами, которые подходят для спауна юнита.
Сам спаун происходит следующей функцией:
Синтаксис:
Используется csharp
private void spawnRed()
{
for (int i = 0; i < redUnitsToSpawn.Count; i++)
{
tilesForRed.Clear();
spawnCheckForRed();
GameObject toSpawn = tilesForRed[Random.Range(0, tilesForRed.Count)];
Instantiate(redUnitsToSpawn[i], new Vector2(toSpawn.transform.position.x, toSpawn.transform.position.y), Quaternion.identity);
}
}
{
for (int i = 0; i < redUnitsToSpawn.Count; i++)
{
tilesForRed.Clear();
spawnCheckForRed();
GameObject toSpawn = tilesForRed[Random.Range(0, tilesForRed.Count)];
Instantiate(redUnitsToSpawn[i], new Vector2(toSpawn.transform.position.x, toSpawn.transform.position.y), Quaternion.identity);
}
}
Переменная toSpawn берет случайный тайл из списка tilesForRed.
Собственно подозрение падает на строку if (parent.transform.GetChild(i).GetComponent<Tile>().IsClear(). По-моему проверка проходит с ошибкой. На всех юнитах висит слой "obstacles".
Подскажите, что делаю не так. Спасибо!