Як змусити АІ-агентів рухатися по кривій?


12

Наразі в моїй дуже базовій системі AI є агенти, які рухаються по нерівній трасі, що складається з серії точок.

nav шлях

Вони роблять це, просто переміщуючи своє положення з однієї точки в іншу. Досягаючи наступної точки, вони рухаються до наступної тощо. Як я можу це змінити, щоб вони плавно рухалися по вигнутій версії шляху, і як генерувати криву?


як вони обирають наступний момент?
FxIII

@FxIII Вибачте, що я раніше не бачив цього коментаря - ви маєте на увазі, як вони обрали нову ціль пошуку чи як обрали наступну точку пошуку?
СерЯкалот

Відповіді:


4

Ти після якогось згладжування шляху. Звичайно, як зауважив bummzack, ви також хочете переконатися, що будь-яке згладжування шляху, яке ви виконуєте, призводить до легальних рухів для ваших агентів.

Ця стаття від Gamasutra пояснює майже все, що вам потрібно знати, включаючи згладжування шляху, юридичні повороти та реалістичні алгоритми плавного повороту.

Іншою альтернативою, яка є дещо простішою, є використання поведінки Seek з невеликим обмежуючим колом / сферою, щоб перевірити, чи перебуває агент у найближчій точці шляху чи близько до неї.


7

Оскільки ви вже знаєте свої контрольні точки, вам просто потрібно оновити свій інтерполяційний код, щоб використовувати алгоритм кривизни (наприклад, Hermite або Cosine).

Ці веб-сайти пропонують чудове пояснення та зразок коду, який повинен розпочати:

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

Sol :: Підручники - Інтерполяційні трюки


Що робити, якщо генерована крива раптом потрапить на перешкоду?
bummzack

Це лише для руху агентів за кадром. Це ж альго виявлення зіткнення все ще застосовуватиметься. Коли виявлено зіткнення, або змініть контрольні точки, щоб уникнути об'єкта (важко), або тимчасово починайте використовувати інший альго-рух.
Doug.McFarlane

@bummzack, це хороший момент, і відповідь полягає в тому, щоб використовувати навігаційну сітку і згладжувати свої криві відповідно, однак на даний момент я просто збираюся це працювати з простим навігаційним графіком, і тому я вирішу це лише шляхом згладжування доріжок небагато.
SirYakalot

@bummzack: додайте деяку поведінку рульового управління для уникнення перешкод на вершині алгоритму генерації вигнутої траси.
imre

0

Я збираюся йти проти зерна тут і пропоную, замість того, щоб попередньо генерувати свої криві, просто обробляти його за кадром, використовуючи (наприклад) ту саму логіку, яку ви використовували для створення настанови -прийняття .

Це буде набагато простіше і, мабуть, реалістичніше, оскільки вам не потрібні спеціальні випадки, коли між двома точками є стіни - ви просто обробляєте виявлення зіткнень, як зазвичай.

Мінус - рух буде виглядати неоптимально. Об'єкт завжди пройде найбільш прямий шлях від однієї точки до іншої, тобто, на відміну від сплайну, він не почне повертатись у напрямку 3, поки він вже не пройшов шлях 2. Залежно від вашої ситуації, це може бути, а може і не бути виправленим, налаштовуючи свої точкові точки (якщо це навіть проблема).


1
Це, по суті, є поведінка шукати, яку я запропонував.
Рей Дей

0

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

Я опублікую тут якесь рішення, якщо зможу знайти момент, щоб глибоко замислитися над цим, але я думаю, що це шлях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.