В поисках хорошей техники движения персонажей в игре Hack & Slash

51

Я создаю игру hack & slash и хочу, чтобы мои персонажи двигались, как, например, в Torchlight, Diablo и т. Д. В настоящее время я генерирую набор узлов для всех проходных областей пола. Когда я кликаю куда-то, игрок идет туда через интерполированный путь узлов. Это не выглядит очень естественно. Игрок движется как робот. Враги также используют эту систему узлов для перемещения и разделяют ту же проблему, но у меня есть еще одна проблема с ними. Когда враги обнаруживают игрока, они идут к нему по кратчайшему пути. Иногда они используют один и тот же путь и выстраиваются в линию к игроку, а не окружают его. Я не знаю, как заставить врагов выбирать разные пути и окружать игрока. Вы знаете, как я могу решить эту проблему? Может быть, я должен использовать другой подход для движения персонажа?


Моя текущая техника:

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


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

---ОБНОВИТЬ---

Я хочу знать, как справиться с этими ситуациями:

Ситуация 1, у меня есть динамические / статические препятствия на моем пути

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

Ситуация 2: враги имеют собственный путь к игроку (встаньте в очередь, чтобы сразиться с нами) введите описание изображения здесь

Piotrek
источник
10
+1 за диаграммы и скриншоты (и хороший вопрос). Всегда полезно.
Коммунистическая утка
Это замечательный вопрос (+1), для которого, я надеюсь, будет много дискуссий и предложений о различных способах решения этой проблемы (рандомизированное влияние на изменение маршрутов, ИИ и т. Д.).
Рэндольф Ричардсон,
1
Я считаю хорошей практикой использовать систему подсчета очков при создании ИИ. В зависимости от оценки каждого врага (например, времени, чтобы добраться до игрока), вы можете задать им определенное поведение. Например, если максимум 8 мобов, которые могут атаковать игрока, те, у кого счет выше, чем у первых восьми, могут сознательно попытаться найти более длинный путь к игроку, чтобы они выглядели более умными.
Джонатан Коннелл
Я все еще ищу ответ, как я могу иметь дело с препятствиями (динамическими / статическими) в сетке навигации? Я не могу использовать Recast
piotrek

Ответы:

24

Поведение рулевого управления в сочетании со структурой навигационных данных .

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

Если вы непреклонны в сохранении графика, вы можете использовать поведение Seek для каждого узла в пути, а не строго следовать пути от узла к узлу.

Другой метод, который вы можете использовать, - Path Smoothing, но имейте в виду, что это довольно дорого в вычислительном отношении.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

Чтобы решить проблемы, связанные с обходом препятствий, используйте метод предотвращения препятствий .

Рэй Дей
источник
Спасибо за ответ, вы знаете, как я могу создать навигационную сетку? Или есть другой способ сделать это? Моя карта создана из бесшовных кусочков пола (квадратов / треугольников).
пиотрек
1
Вы всегда можете использовать Recast ( code.google.com/p/recastnavigation ) для создания сетки навигации. Вам просто нужно дать ему «суп из треугольников» (кучу полигонов), и он сгенерирует его для вас.
Рэй Дей
Я один сталкиваюсь с этим, но ссылка: ai-blog.net/archives/000152.html мертва. На самом деле я не могу получить доступ к www.ai-blog.net
123iamking
3

Если вы предпочитаете использовать графа узлов, а не переключаться на сетку навигации, как предлагали другие, то вы можете решить проблему «выстраивайтесь к игроку вместо того, чтобы окружать его», назначив каждого врага для атаки с определенного направления.

Есть много способов сделать это, но я обычно использую систему «токенов», чтобы назначать монстрам уникальные направления, где объект игрока обладает одним токеном для каждого направления (север, северо-восток, восток и т. Д.). Когда враг хочет пройти к игроку, он сначала должен получить от него жетон. Направление, указанное токеном, говорит монстру, на какую сторону игрока ему разрешено находить путь. Поскольку у игрока есть только один жетон для каждого направления, и монстры нуждаются в жетоне, прежде чем они смогут атаковать, несколько монстров не будут пытаться проложить путь к одной и той же стороне игрока, что должно немного нарушить их пути.

Кроме того, вы можете также захотеть применить небольшое наказание к узлам в процессе поиска путей, чтобы побуждать монстров приближаться с направления, которое соответствует их токену. (То есть, если у монстра есть жетон, который позволяет ему атаковать с востока, то для определения «кратчайшего пути» для этого монстра обработайте любые узлы пути, которые находятся к северу / западу / югу от игрока, как если бы это несколько узлов, а не только один). Это заставит монстров отделяться быстрее и попытаться обойти игрока, вместо того, чтобы идти к игроку в одном файле и распространяться только на последнем шаге.

Тревор Пауэлл
источник
2

В основном, для врагов вам нужно найти пути на макроуровне (подумайте о создании выпуклых областей и пути к области, в которой находится игрок) и выполнить некоторые действия в стиле boid в стиле руля на микроуровне (как только вы приблизитесь). игроку).

Вот пример поведения boid: http://www.red3d.com/cwr/boids/

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

тетрада
источник
Но что, например, с лестницей? Враг может напасть на меня и сделать еще одну навигационную сетку?
пиотрек
Он должен быть частью навигационной сетки, являясь собственной выпуклой формой.
Тетрад
1
В качестве альтернативы вы могли бы продолжать использовать путь «точка-точка» и вернуться к физическому поведению рулевого управления, когда вы приблизитесь.
Тетрад
Как я могу бороться с динамическими препятствиями в навигационных сетках?
пиотрек
1
Вот сообщение в блоге о том, как recast работает с ним: digestingduck.blogspot.com/2011/03/… .
Тетрад
1

есть алгоритм с именем rrt, который используется для задачи поиска пути в реальном мире. поверхность, по которой может пройти ваш герой (или враги), является входной информацией наряду с поверхностью, по которой могут перемещаться объекты, и, используя некоторый алгоритм оптимизации, находит путь к месту назначения. насколько мне известно, этот алгоритм широко используется в лигах robocup. это быстро, находит кратчайший путь и избегает столкновений и крутых поворотов. Вы можете использовать это представление PowerPoint, чтобы понять, как он генерирует путь.

Ali1S232
источник
после более подробного изучения представленная мною презентация просто рассказывает о том, что делает rrt, а также предлагает новый подход, который, как утверждается, работает лучше в некоторых случаях, и он предположил, что алгоритм поиска путей к играм RTS надеется, что он вам поможет.
Ali1S232
0

Чтобы маршруты поиска маршрутов выглядели более «реалистично», я предлагаю вам ознакомиться со статьей о естественном виде A * в Game Programming Gems Vol.1

Freud
источник