Яке стандартне рішення для наведення шляху до рухомої цілі?


28

Я працюю над 2D RTS типу гри, базовий A * прекрасно працює для переміщення одиниці з точки А в точку В.

Але тепер я зіткнувся з проблемою безперервного пошуку шляху, як, наприклад, атака рухомого об’єкта B, викликати A * у кожному кадрі, як тільки зміна позиції Об'єкта B здається неефективною.

так що є стандартним методом цієї проблеми?


1
Не існує стандартного методу.
Kylotan

3
Не існує єдиного стандартного методу, але є багато літератури про загальні методи вирішення проблеми.

Відповіді:


17

З того, що мені відомо, ви могли поглянути на алгоритм D *, який означає "Динамічний А *". Цей алгоритм використовується для обчислення маршрутизації для динамічного середовища тут з рухомою ціллю.

Ось документ, що використовує D * для пошуку цільового шляху, що рухається: Переміщення цілі D * Lite


10

Один варіант - зробити новий шлях лише раз на кілька кадрів. Якщо ви робили це один або два рази на секунду, а не 60+ разів на секунду, користувач навряд чи помітить, якщо вони не є двома двома дуже швидко рухаються об'єктами


8

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

Простим приблизним способом може стати щось таке:

A = NPC

B = Ціль

T = час дістатися до позиції B: s (B: s вихідне положення)

Обчисліть, де буде B через час "T" (якщо B продовжується з тією ж швидкістю / кутом), і перейдіть туди.

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


3
Не знав про собак. Я сьогодні щось дізнаюся!
SteeveDroz

3

Згоден з Kylotan, що не існує стандартного методу.

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

Зробити краще це дуже важко. Якщо ви насправді не маєте знань про непохитний шлях цілі, ви прямуєте в край досить важкого ШІ, тому що у вас буде друге здогадування або імітація цільової поведінки, щоб вгадати, де вони будуть і шлях до цього. Цей різновид AI - це AB-гра в реальному часі з теорії ігор, область, яка не є стандартною для будь-якого інструментарію AI з 3D-іграми.


2

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

Один із способів зробити це - використання серії Тейлора.

Я буду називати шлях цілі з часом функцією S (t), де S - положення, а t - поточний час, а наближення до шляху - A (f), а f - дата в майбутньому наближається .

Тоді найпростіший і найдурніший наближення - A (f) = 0.

Наступний найпростіший - A (f) = S (t), де t - поточний час, а f - майбутнє. Це передбачає, що мета просто зупиняється на місці.

Третій найпростіший - A (f) = S '(t) * f + S (t), де S' є похідною від S за часом. Це передбачає, що ціль продовжується з постійною швидкістю без прискорення.

Четвертий найпростіший - A (f) = S '' (t) * f ^ 2/2 + S '(t) * f + S (t). Це передбачає, що ціль прискорюється з постійною швидкістю, як падаюча куля.

Я знаю, що це можна перефразувати з точки зору зміни часу, що, мабуть, зручніше для гри. Тепер S може бути чим завгодно. Це може бути координата X, це може бути координата Y, це може бути відстань між об'єктами, це може бути кут. Також є ймовірніші кращі методи прогнозування майбутнього шляху об’єкта, щоб я трохи озирнувся.


1

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

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