Цикл проверки занятости координат и их заполнение
Добавлено: 23 ноя 2021, 20:43
Здравствуйте, форумчане. Начинающему разработчику никак не получается найти решение задачи, цель которой в том, чтобы после проверки координат на наличие в них объектов создавать объекты на свободных координатах. Логика написанного кода в том, что сначала присваивается случайная координата из массива, далее она проверяется на занятость, и если свободна, то занимается объектом, если занята, то цикл повторяется с другой координатой. Но получается так, что она просто бесконечно создаёт объекты в рандомных местах (по координатам), хотя должна остановиться по достижению 10 объектов в сцене. Подскажите, пожалуйста, что может быть не так? Заранее благодарю за ответ.
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;
public class Enem3 : MonoBehaviour
{
public GameObject enemies;
private Vector2[] coordinats = new Vector2[]
{
new Vector2(0, 1),
new Vector2(0, 3),
new Vector2(3, 1),
new Vector2(3, 3),
new Vector2(-3, 1),
new Vector2(-3, 3),
new Vector2(6, 1),
new Vector2(-6, 1),
new Vector2(6, 3),
new Vector2(-6, 3),
};
void Start()
{
StartCoroutine(Spawn());
IEnumerator Spawn()
{
while (true)
{
Vector2 tour = coordinats[Random.Range(0, 10)];
Collider[] intersecting = Physics.OverlapSphere(tour, 0.01f);
if (intersecting.Length == 0)
{
Instantiate(
enemies,
tour,
Quaternion.identity);
yield return new WaitForSeconds(0.5f);
}
}
}
}
}
using UnityEngine;
public class Enem3 : MonoBehaviour
{
public GameObject enemies;
private Vector2[] coordinats = new Vector2[]
{
new Vector2(0, 1),
new Vector2(0, 3),
new Vector2(3, 1),
new Vector2(3, 3),
new Vector2(-3, 1),
new Vector2(-3, 3),
new Vector2(6, 1),
new Vector2(-6, 1),
new Vector2(6, 3),
new Vector2(-6, 3),
};
void Start()
{
StartCoroutine(Spawn());
IEnumerator Spawn()
{
while (true)
{
Vector2 tour = coordinats[Random.Range(0, 10)];
Collider[] intersecting = Physics.OverlapSphere(tour, 0.01f);
if (intersecting.Length == 0)
{
Instantiate(
enemies,
tour,
Quaternion.identity);
yield return new WaitForSeconds(0.5f);
}
}
}
}
}