Як працює проходження маршрутів в іграх RTS?


42

[перехресне повідомлення від stackoverflow]

У такій грі, як Warcraft 3 або Age of Empires, способи, яким противник ШІ може рухатись по карті, здаються майже безмежними. Карти величезні, а позиція інших гравців постійно змінюється.

Як працює пошук ШІ в таких іграх? Стандартні методи пошуку графіків (такі як DFS, BFS або A *) здаються неможливими в таких налаштуваннях.


2
Чому A * не працює в цьому графіку?
user712092

Блог, пов’язаний з цим: ai-blog.net/archives/000152.html
десять четвертого

1
@tenfour, посилання зараз розірвано.
Монреаль

Відповіді:


29

У більшості випадків використання A * над навігаційною сіткою (зазвичай її називають "навмеш") - це комерційне рішення, що використовує комерційні RTS. Існує докладне пояснення того , як navmeshes працюють, чому вони є кращим рішенням , ніж системи маршрутних точок, а також посилання на ресурси реалізації, тут .

Якщо ви плануєте розробляти спеціальні режими гри (захоплення точки / вузла) або підрозділи, які патрулюють, захоплюють і т.д., ви, ймовірно, захочете реалізувати шар точкової точки на вашому navmesh, щоб контролювати поведінку AI ( не pathfinding ).


17

Ознайомтеся з алгоритмом Flowfield , який використовується у Supreme Commander 2. Це набагато краща робота, ніж у більшості систем маршрутизації маршрутів RTS (пропустіть вперед до 0:50 для кількох прикладів.)


4
це справді класна демонстрація, але нічого не розповідає про саму реалізацію
MetaGuru

4
Вони згадували в одному реченні - це засноване на дослідженні потоку натовпу UW, яке ви можете знайти на сайті grail.cs.washington.edu/projects/crowd-flows .

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

2
@Kragen: Вам справді потрібні лише два одиниці, перш ніж звичайний A * (особливо призначений за призначенням) змушує їх набігати один на одного знову і знову, і вам потрібна якась система, щоб обійти його.

5
Виходячи із відеоролика, прослідкування маршруту Starcraft 2 виглядає приблизно так. Чи використовує SC2 проточне поле?
Кріс Буй

7

Багато старих ігор використовують A *. В оригінальній Starcraft використовувався A *; що призвело до певних проблем в роботі із зіткненням. Starcraft 2 дуже добре справляється зі зіткненням, використовуючи поведінку плавання / стикання для підтримки контролю рідини великими групами. Ця стаття про гамедев розповідає про те, як цього можна досягти.


2

Я погоджуюся з іншими відповідями на неї вже, але також намагаюся вважати WoW / Warcraft3 як фактичні 2D світи. Вони не такі, що відрізняються від основи плитки, це просто плитки.

Ви також можете подумати, як GPS знайде найкращий шлях? там багато альгортимнів для проходження маршруту через пов'язані карти.

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

Загалом, моїм особистим способом поводження з такою картою було б подумати про це як A * pathfinder. Але спершу я б попередньо обчислив кожну "плиткову точку" та індексував усе це "найближчим сусідом" і т. Д. Потім, коли об’єкту потрібно було перейти від А до В, тоді просто знайдіть у В, подивіться, що його пов'язано, і продовжуйте повторювати, поки ви досягти мети.

Залежно від типу гри та ландшафту / сценарію, різні тактики попереднього сканування також можуть бути корисними. У деяких іграх дуже мало перешкод, і це може бути рух "прямої лінії" + деякі "як мені обійти" для об'єктів.

Сподіваюсь, це має трохи сенсу і, можливо, дало вам кілька думок для роботи.


1

Більшість ігор використовують якийсь алгоритм пошуку або A * для пошуку шляхів на карті. AI налаштовано в деяких аспектах, очевидно, з причин ефективності.

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


1

Карта - сітка. Сітка - це графік. A * працює на графіку, це алгоритм пошуку графіків. A * повинен шукати кілька вузлів графіка.

Як вже було сказано, вони можуть використовувати навігаційну сітку. Але A * (або щось подібне) все одно буде поверх цієї сітки, тому що багатокутники цієї сітки є лише вузлами графіка; Потім * буде шукати шлях від одного багатокутника до іншого багатокутника.

Не впевнений у Warcraft або комерційних іграх, але є також техніка, яка називається Collaborative Diffusion, і це дуже просто; зазвичай це робиться на сітці. Існує також техніка під назвою Потенційні поля , яка дуже схожа на попередню, якщо не таку ж.

Ви також можете спробувати:

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

0

Я абсолютно не досвідчений, але думаю, що гарне рішення базується на евристиці, а не на повній перевірці відомої карти. Евристика, яку я можу придумати, локальна та заснована на досвіді. Місцеві органи управління можуть базуватися на місцевій місцевості та перешкодах, рухаючись у потрібному напрямку. Я думаю, що більшість карт не потребують складних лабіринтних рухів, але вони досить пов'язані. Іншим евристичним є використання попередніх відомих шляхів (досліджених іншими підрозділами або явно користувачем) для переміщення одиниць у відомі або близькі до відомих позицій. Але я говорю про переміщення на великих картах, а не на закритих просторах, як сказав ZorbaTHut. У переповнених випадках алгоритм може бути складнішим, вимагаючи різного роду "прогнозування", координації між підрозділами тієї ж команди або просто стратегії очікування, що нагадують семафор. Також,

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

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


Мммм Цікаво, що було не так у тому, що я сказав ... було занадто важко, щоб викласти коментар?
AkiRoss

До речі, я хотів би зазначити, що A * використовує евристичний підхід. Дякую за -2.
AkiRoss

Ваша відповідь дорівнює "Ditch A * та її ілк і закочуй своє". Це може бути початком розумної відповіді, але ви надаєте дуже мало інформації, крім пропозиції. Думаю, що причиною відмови в голосуванні є те, що ви не даєте зрозуміти, наскільки важким буде ваше рішення. Я не сумніваюся, що супер геній, що надається необмеженим часом, може ввести код / ​​налаштувати алгоритм трасування для даної RTS, який був би кращим A * на navmesh. Але "генію" та "необмеженість" дуже важко підійти.
deft_code

О, так. Я подумав, що хлопець хоче загальну відповідь, оскільки він не запитував, як його зробити, а як вони взагалі працюють. У всякому разі, я не експерт, як я вже сказав: я просто давав інформацію про рішення, які я знаю, щодо вивчення великих просторів у загальній програмі ІА. Дякуємо за ваш коментар
AkiRoss
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.