Шукаєте гарну техніку для руху персонажів у гейк-слэш-грі


51

Я роблю грі і слэш-ігри, і я хочу, щоб мої персонажі рухалися, як, наприклад, у Torchlight, Diablo тощо. В даний час я генерую набір вузлів для всіх прохідних областей підлоги. Коли я натискаю десь, гравець проходить туди через інтерпольований шлях вузлів. Це не дуже природно. Гравець рухається як робот. Вороги також використовують цю систему вузлів для руху і поділяють ту саму проблему, але у мене є ще одна проблема з ними. Коли вороги виявляють гравця, вони йдуть до нього найкоротшим шляхом. Іноді вони використовують один і той же шлях і вишикуються до гравця, а не оточують його. Я не знаю, як змусити ворогів вибирати різні шляхи та оточувати гравця. Чи знаєте ви, як я можу вирішити цю проблему? Можливо, я повинен використовувати інший підхід для руху персонажів?


Моя сучасна техніка:

введіть тут опис зображення


Скріншот факела:введіть тут опис зображення

--- ОНОВЛЕННЯ ---

Я хочу знати, як вирішувати такі ситуації:

Ситуація 1, у мене на шляху є динамічні / статичні перешкоди

введіть тут опис зображення

Ситуація 2, Вороги мають шлях до гравця (встаньте в чергу, щоб битися з нами) введіть тут опис зображення


10
+1 для діаграм і скріншотів (і гарне запитання). Завжди корисний.
Качка комуніста

Це дивовижне запитання (+1), на яке я сподіваюся, що буде багато дискусій та пропозицій щодо різних способів вирішити цю проблему (рандомізовані впливи на зміну маршрутів, ШІ тощо).
Рандольф Річардсон

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

Я все ще шукаю відповіді, як я можу впоратися з помилками (динамічними / статичними) на nav mesh? , Я не можу використовувати
Recast

Відповіді:


24

Керування поведінкою у поєднанні зі структурою навігаційних даних .

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

Якщо ви налаштовані на збереження графіка, ви можете використовувати поведінку Seek до кожного вузла на шляху, а не жорстко слідувати шляху від вузла до вузла.

Інший метод, який ви можете використати, - це Path Smoothing, але майте на увазі, що це досить обчислювально дорого.

Сподіваюся, що це допомагає.

Редагувати:

Щоб допомогти у вирішенні проблем із уникненням перешкод, використовуйте якесь уникнення перешкод .


Thx для відповіді, чи знаєте ви, як я можу генерувати навігаційну сітку? Або є інший спосіб зробити це? Моя карта, створена з безшовних шматків підлоги (квадрати / трикутники).
piotrek

1
Ви завжди можете використовувати Recast ( code.google.com/p/recastnavigation ) для створення навігаційної сітки. Вам просто потрібно дати йому «суп з трикутника» (купу багатокутників), і він генерує його для вас.
Рей Дей

Я лише зустрічаюся з цим, але посилання: ai-blog.net/archives/000152.html померло. Насправді я не можу отримати доступ до www.ai-blog.net
123iamking

3

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

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

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


2

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

Ось приклад поведінки боїда: http://www.red3d.com/cwr/boids/

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


Але, що, наприклад, зі сходами? Ворог може напасти і на мене там, зробити це ще однією наві-сіткою?
піотрек

Він повинен бути частиною сітчастої сітки, мати її власну опуклу форму.
Тетрад

1
Крім того, ви можете продовжувати використовувати свою точкову точку руху та повертатися назад на рульове поведінку на основі фізики, коли ви наближаєтесь "близько".
Тетрад

Як я можу впоратися з динамічними перешкодами на навігаційних мережах?
piotrek

1
Ось блог про те , як переглянутому працює над його обробки: digestingduck.blogspot.com/2011/03 / ... .
Тетрад

1

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


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

0

Щоб маршрути проходження маршрутів виглядали більш "реалістичними", я пропоную вам ознайомитись зі статтею про натуральний вигляд A * у Ігрових програмування Gems Vol.1

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