Как разместить новый объект на свободном месте на поле Unity

Для игры необходимо было разместить новый объект, чтобы он не соприкасался с объектами, находящимися на поле боя.

Для этого у них должны быть коллайдеры.  Метод Physics.OverlapSphere определяет наличие коллайдеров в некотором радиусе сферы.

Получилась такая функция для определения отсутствия объектов в некотором радиусе:

  public static Vector3 CheckNewPosition(int radius)
        {
            Vector3 pos = new Vector3(Random.Range(22f, -22f), 0f, Random.Range(13f, -13f)); ;
            bool isCheck = false;
            while (!isCheck)
            {
                pos = new Vector3(Random.Range(22f, -22f), 0f, Random.Range(13f, -13f));
                Collider[] hitColliders = Physics.OverlapSphere(pos, radius);
                if (hitColliders.Length == 1)
                {
                    isCheck = true;
                }
            }
            return pos;
        }

Функция выбирает рандомное положение на поле, и проверяет, есть ли в радиусе от этой позиции коллайдеры. Если они есть, цикл повторяется, пока не найдется свободное место.


Обновлено: 03.12.2019

Вам помогла эта статья? Оцените!
(Пока оценок нет)
Загрузка...


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *