Как заставить агентов ИИ двигаться по кривой?

12

В настоящее время в моей очень базовой структуре ИИ есть агенты, которые движутся по неровной траектории, состоящей из ряда точек.

навигационный путь

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

SirYakalot
источник
как они выбирают следующую точку?
FxIII
@FxIII извините, я не видел этот комментарий раньше - вы имеете в виду, как они выбрали новую цель поиска или как они выбрали следующую точку в поиске?
SirYakalot

Ответы:

4

Вы после некоторого сглаживания пути. Конечно, как указал Буммзак, вы также хотите убедиться, что любое сглаживание пути, которое вы выполняете, приводит к легальным перемещениям ваших агентов.

В этой статье от Gamasutra объясняется почти все, что вам нужно знать, включая сглаживание пути, правовые повороты и реалистичные алгоритмы сглаживания поворотов.

Другой альтернативой, которая немного проще, является использование поведения Seek с небольшим ограничивающим кругом / сферой, чтобы проверить, находится ли агент в следующей точке пути или близко к ней.

Рэй Дей
источник
7

Поскольку вы уже знаете свои контрольные точки, вам просто нужно обновить код интерполяции, чтобы использовать алгоритм кривизны (например, Эрмита или Косинуса).

Эти сайты предлагают отличное объяснение и пример кода, который должен помочь вам начать:

Пол Бурк Методы интерполяции

Sol :: Учебники - Интерполяционные хитрости

Doug.McFarlane
источник
Ну что, если сгенерированная кривая внезапно натолкнется на препятствие?
bummzack
Это только для движения агентов, за кадр. Тот же алгоритм обнаружения столкновений будет применяться. При обнаружении столкновения либо измените контрольные точки, чтобы избежать объекта (сложно), либо временно начните использовать другой алгоритм движения.
Doug.McFarlane
@bummzack - это хороший момент, и ответ заключается в том, чтобы использовать сетку навигации и соответствующим образом сгладить ваши кривые, однако сейчас я просто собираюсь заставить это работать с простым графом навигации, и поэтому я просто решу это, только сглаживая пути немного.
SirYakalot
@bummzack: добавить некоторые способы управления для предотвращения препятствий поверх алгоритма генерации криволинейного пути.
Имре
0

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

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

Недостатком является то, что движение будет выглядеть неоптимально. Объект всегда будет идти по самому прямому пути от одной путевой точки к другой, то есть, в отличие от сплайна, он не начнет поворачиваться к путевой точке 3, пока он уже не пройдет путевую точку 2. В зависимости от вашей ситуации это может или не может произойти быть исправимым путем корректировки ваших путевых точек (если это даже проблема).

BlueRaja - Дэнни Пфлугхофт
источник
1
По сути, это было бы поведение поиска, которое я предложил.
Рэй Дей
0

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

Я опубликую здесь какое-то решение, если найду момент, чтобы глубоко задуматься над этим, но я думаю, что это путь.

FXIII
источник