Поиск случайной позиции на 2D карте с учетом занятого места.

Общие вопросы о Unity3D

Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение Taras 29 дек 2021, 12:10

Доброго времени суток!
Есть 2D карта на которой я с пула объектов достаю и размещаю в случайные позиции объекты.
Сначала все объекты были круглой формы и я в инспекторе мог указать префабу радиус занимаемой площади.

Теперь префабы могут иметь различную форму. И указывать просто прямоугольник через инспектор не хочется.
Например, префаб в виде буквы Г, тогда очень много пустого места будет не использовано если его просто в прямоугольник загнать.

Планирую считать занимаемое место получая локальные координаты всех коллайдеров префаба и записывая их в массив.
А при поиске свободного места для размещения префаба брать данные с этого массива.
Проблема в том что для работы с коллайдерами нужно сначала инстациировать объект на сцене. Для этого сначала буду инстациировать префаб за пределами карты и в отдельный слой.
Потом заполнять массив с занимаемыми координатами, и уже используя этот массив искать свободное место на карте с переносом префаба в найденное место.

Какие еще могут быть варианты поиска свободного места на карте с учетом разных габаритов префабов сложной формы?
Taras
UNец
 
Сообщения: 24
Зарегистрирован: 19 май 2021, 09:59

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение 1max1 29 дек 2021, 21:35

Так и хочется сказать: "Нейронная сеть!", но нет, это слишком упоротый вариант. В целом, любой сложный объект можно разложить на более простые, если только он не слишком сложный)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение samana 29 дек 2021, 22:02

Вообще смотря какая у вас карта и как объекты на ней должны быть расположены.
По сути нужно пройтись по всей карте с каким-то шагом и в каждой такой точке "покрутить" добавляемый объект, проверяя его на столкновения.

Если у вас всё по клеточкам и объекты поворачиваются только с шагом 90 градусов, то это уже легче. Так как всю информацию о занимаемой площади объектами, можно хранить в двумерном массиве и обойтись вообще без коллайдеров.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение Taras 30 дек 2021, 10:34

samana Да, примерно делаю так как Вы говорите.
Интересует способ заполнения того самого массива информацией об объекте.
Taras
UNец
 
Сообщения: 24
Зарегистрирован: 19 май 2021, 09:59

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение samana 30 дек 2021, 11:18

Taras писал(а):Интересует способ заполнения того самого массива информацией об объекте.

Это если клеточное поле и поворот объектов кратен 90 градусов?
Тогда карта - это двумерный массив с размерами вашего игрового поля, то-есть матрица данных. Где просто информация о том - свободна или занята текущая клетка на карте.

Каждый ваш объект(он ведь прямоугольный) тоже можно разложить на двумерный массив (матрицу), например для строения в форме буквы "Г"
[1, 1, 1]
[1, 0, 0]
[1, 0, 0]
[1, 0, 0]

Затем для размещения объекта на карте, нужно "наложить" матрицу объекта на матрицу поля и проверить что под всеми единицами матрицы объекта, находятся нули матрицы поля. И если это так, то означает что объект можно туда установить.

Конечно на словах всё просто. Но на деле будет над чем поработать. Где-то на ютубе были такие классные уроки (на русском) как раз на подобную тему..
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение Taras 30 дек 2021, 11:38

samana писал(а):Каждый ваш объект(он ведь прямоугольный) тоже можно разложить на двумерный массив (матрицу), например для строения в форме буквы "Г"
[1, 1, 1]
[1, 0, 0]
[1, 0, 0]
[1, 0, 0]

Спасибо большое за подробный ответ!
Пытаюсь понять как в префабе создать такой массив. Не вручную же его заполнять?
П.С. Обьекты на карте это бактерии разной формы которые передвигаются. Создавать новых бактерий и размещать их в случайные не занятые позиции нужно постоянно.
Способ как в этом видео не подходит так как там задается количество клеток занимаемое префабом в виде прямоугольника. https://www.youtube.com/watch?v=QmJRq1GTL4g
Taras
UNец
 
Сообщения: 24
Зарегистрирован: 19 май 2021, 09:59

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение samana 30 дек 2021, 11:44

Taras писал(а):П.С. Обьекты на карте это бактерии разной формы которые передвигаются. Создавать новых бактерий и размещать их в случайные не занятые позиции нужно постоянно.

Тогда мне кажется, что клеточная карта может и не подойти. Ведь бактерии вряд ли перемещаются строго по клеткам (это ведь не тетрис)..
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение Taras 30 дек 2021, 11:54

samana писал(а):Тогда мне кажется, что клеточная карта может и не подойти. Ведь бактерии вряд ли перемещаются строго по клеткам (это ведь не тетрис)..

Перемещение не с шагом в клетку, плавное, но если коллайдер бактерии хоть немного залез на "клетку" то считаю ее занятой.
При размещении нового объекта на карте ищу случайную точку(с шагом в одну клетку) проецирую на нее и близлижащие клетки массив занимаемых клеток из префаба которий хочу разместить. Ну а дальше кручу верчу и если не помещаюсь то следующая случайна точка(а эту исключаю).
На данный момент проблема с заполнением массива префаба.
Taras
UNец
 
Сообщения: 24
Зарегистрирован: 19 май 2021, 09:59

Re: Поиск случайной позиции на 2D карте с учетом занятого места.

Сообщение DiZZarK2 31 дек 2021, 00:16

Taras писал(а):Планирую считать занимаемое место получая локальные координаты всех коллайдеров префаба и записывая их в массив.


Вот же записано готовое решение. Зачем получать координаты если можно рассчитать свободное место в массиве а затем поместить туда объект?
Аватара пользователя
DiZZarK2
UNец
 
Сообщения: 42
Зарегистрирован: 03 дек 2021, 10:21


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19