Войти
ПрограммированиеФорумОбщее

RTS: как разрулить толпу юнитов перед зданием, которое их производит?

Страницы: 1 2 3 4 Следующая »
#0
14:31, 22 июня 2021

Есть классическая РТС в стиле C&C и WarCraft 2. Строим здания, здания производят юнитов.

Как разрулить толпу юнитов перед зданием, которое их производит? Когда произведён первый юнит, то он блокирует место, в которое должен быть установлен следующий юнит. Следующий может попросить предыдущего освободить пространство и включит ему Flee. Можно также попробовать разрулить толпу стирингом. Однако, очень быстро перед зданием образуется мессиво из юнитов.

Как в RTS принято решать эту проблему? Например, в Emperor: The battle for dune юниты выстраиваются стройными рядами, занимая свободное пространство. Новый юнит просит строй перестроиться, освобождая свободную клетку перед зданием, а затем становится в неё. В итоге, юниты красиво построены и занимают минимум пространства.

Как можно реализовать подобное? Как делают в других играх?


#1
14:42, 22 июня 2021

В старкрафте юниты выстраиваются вокруг здания, если всё пространство занято, то производство останавливается.

#2
14:48, 22 июня 2021

Можно назначить зданию точку назначения как в Age of empires . Каждый новый произведенный юнит не стоит на месте, а идет к этой точке назначения.

#3
15:26, 22 июня 2021

Robotex
> Однако, очень быстро перед зданием образуется мессиво из юнитов.
Вроде это стандарт, какбе игрок должен контролировать процесс.Ну или пусть они идут все дальше и дальше от базы.

#4
15:51, 22 июня 2021

Ладно, перефразирую вопрос:

Как сделать такое же поведение, как в EBfD?

endeavour_pr
> Вроде это стандарт, какбе игрок должен контролировать процесс
Хочу сделать нормально, а не на отъебись

#5
16:14, 22 июня 2021

Вот чего я хочу добиться:

unnamed | RTS: как разрулить толпу юнитов перед зданием, которое их производит?

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

Это очень удобно: не нужно париться о том, что производство встанет из-за недостатка места, не нужно париться о юнитах на базе (можно спокойно добавить в очередь строительства новых и быть уверенным, что они сами там разрулятся, пока ты занят в другой части карты) и всегда можно быстро определить визуально сколько у тебя примерно юнитов готово.

#6
16:14, 22 июня 2021

простенький flock behaviour?

#7
(Правка: 16:32) 16:28, 22 июня 2021

Robotex, сделать что-то типа "адаптирующегося отпугивающего сигнала". Здание замеряет загруженность юнитами территории вокруг себя в пределах некоторого радиуса, и чем больше эта загруженность - тем более дальнодействующим становится "отпугивающий сигнал". Если вообще не загружено - дальнодействие только на одну клетку, то есть, чтоб только что изготовленный юнит отошел от выхода.

UPD. Если хочется сохранять некоторый порядок - можно аналогично для только что изготовленных юнитов тоже сделать "взаимный отпугивающий сигнал" фиксированного дальнодействия - так теоретически юниты должны будут сохранять гексагональный порядок.

#8
16:57, 22 июня 2021

Dmitry_Milk
Скорее всего там что-то типа формаций используется. Если просто flock, то они будут стоять как попало.

Возможно, там что-то типа такого: если клетка, в которую я хочу перейти занята, то прошу юнита подвинуться и жду, пока клетка освободится. Если юнит может перейти на свободную, то он переходит и оповещает нового юнита. Если перейти некуда, то он просит следующего юнита и так по цепочке, пока не будет освобождена позиция нового юнита.

#9
17:00, 22 июня 2021

Robotex
Юнит спавнится и ищет себе клетку в навмеше. Если там кто-то есть, то он него оттуда вытесняет. И уже тот ищет себе. И так пока все не раступятся.

#10
17:01, 22 июня 2021

Вот так они выстраиваются, если задать зданию какую-то конкретную точку сборки:

58bf8c12ae9ef | RTS: как разрулить толпу юнитов перед зданием, которое их производит?

Надо будет в игре посмотреть: пытается ли новый юнит зайти в середину строя, именно в точку, в которой они собираются, или же просто становится с краешку.

#11
(Правка: 17:04) 17:04, 22 июня 2021

При производстве юнита определять куда он должен встать. Если нужны ровные ряды - значит считать сколько там юнитов уже стоит ровными рядами и соответственно прибавлять координату. Если нужно просто чтоб выход не закрывали - ближайшую свободную клетку.
Ну и дальше юнит когда выходит из постройки идёт к этой точке. Расталкивая других либо вообще игнорируя препятствия.

#12
(Правка: 22:50) 22:46, 22 июня 2021

cells, до своей ячейки он идёт без коллайдера. Вообще коллайдеры в RTS это зло, зачем они тебе там? проверять на сколько отскочила пуля от танка? Юниту лишь надо знать высоту на которой он должен быть.

#13
6:55, 23 июня 2021

Dimich
> В старкрафте юниты выстраиваются вокруг здания, если всё пространство занято, то производство останавливается.
это неправда

#14
(Правка: 12:57) 12:57, 23 июня 2021

Salamandr
> Вообще коллайдеры в RTS это зло, зачем они тебе там?
Чтобы юниты в одну точку не могли слипнуться. Ну а вообще, вот бьет арта, снаряд летит определенное время. Пока снаряд летит, юнит может сбежать из зоны поражения. А если не сбежал, то будет коллизия и мы это обработаем.

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумОбщее