Я создаю игру hack & slash и хочу, чтобы мои персонажи двигались, как, например, в Torchlight, Diablo и т. Д. В настоящее время я генерирую набор узлов для всех проходных областей пола. Когда я кликаю куда-то, игрок идет туда через интерполированный путь узлов. Это не выглядит очень естественно. Игрок движется как робот. Враги также используют эту систему узлов для перемещения и разделяют ту же проблему, но у меня есть еще одна проблема с ними. Когда враги обнаруживают игрока, они идут к нему по кратчайшему пути. Иногда они используют один и тот же путь и выстраиваются в линию к игроку, а не окружают его. Я не знаю, как заставить врагов выбирать разные пути и окружать игрока. Вы знаете, как я могу решить эту проблему? Может быть, я должен использовать другой подход для движения персонажа?
Моя текущая техника:
Скриншот факела:
---ОБНОВИТЬ---
Я хочу знать, как справиться с этими ситуациями:
Ситуация 1, у меня есть динамические / статические препятствия на моем пути
Ситуация 2: враги имеют собственный путь к игроку (встаньте в очередь, чтобы сразиться с нами)
Ответы:
Поведение рулевого управления в сочетании со структурой навигационных данных .
Есть несколько способов сделать это, но это основная концепция. Возможно, будет проще использовать сетку навигации, чтобы вы могли применять поиск путей в каждом выпуклом разделе.
Если вы непреклонны в сохранении графика, вы можете использовать поведение Seek для каждого узла в пути, а не строго следовать пути от узла к узлу.
Другой метод, который вы можете использовать, - Path Smoothing, но имейте в виду, что это довольно дорого в вычислительном отношении.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ:
Чтобы решить проблемы, связанные с обходом препятствий, используйте метод предотвращения препятствий .
источник
Если вы предпочитаете использовать графа узлов, а не переключаться на сетку навигации, как предлагали другие, то вы можете решить проблему «выстраивайтесь к игроку вместо того, чтобы окружать его», назначив каждого врага для атаки с определенного направления.
Есть много способов сделать это, но я обычно использую систему «токенов», чтобы назначать монстрам уникальные направления, где объект игрока обладает одним токеном для каждого направления (север, северо-восток, восток и т. Д.). Когда враг хочет пройти к игроку, он сначала должен получить от него жетон. Направление, указанное токеном, говорит монстру, на какую сторону игрока ему разрешено находить путь. Поскольку у игрока есть только один жетон для каждого направления, и монстры нуждаются в жетоне, прежде чем они смогут атаковать, несколько монстров не будут пытаться проложить путь к одной и той же стороне игрока, что должно немного нарушить их пути.
Кроме того, вы можете также захотеть применить небольшое наказание к узлам в процессе поиска путей, чтобы побуждать монстров приближаться с направления, которое соответствует их токену. (То есть, если у монстра есть жетон, который позволяет ему атаковать с востока, то для определения «кратчайшего пути» для этого монстра обработайте любые узлы пути, которые находятся к северу / западу / югу от игрока, как если бы это несколько узлов, а не только один). Это заставит монстров отделяться быстрее и попытаться обойти игрока, вместо того, чтобы идти к игроку в одном файле и распространяться только на последнем шаге.
источник
В основном, для врагов вам нужно найти пути на макроуровне (подумайте о создании выпуклых областей и пути к области, в которой находится игрок) и выполнить некоторые действия в стиле boid в стиле руля на микроуровне (как только вы приблизитесь). игроку).
Вот пример поведения boid: http://www.red3d.com/cwr/boids/
Для игрока я думаю, что torchlight делает поиск пути в навигационной сетке, где вы щелкаете / перетаскиваете, и это работает довольно хорошо. Может показаться, что он более отключен, чем прямое управление, но это приводит к лучшим результатам для игрока.
источник
есть алгоритм с именем rrt, который используется для задачи поиска пути в реальном мире. поверхность, по которой может пройти ваш герой (или враги), является входной информацией наряду с поверхностью, по которой могут перемещаться объекты, и, используя некоторый алгоритм оптимизации, находит путь к месту назначения. насколько мне известно, этот алгоритм широко используется в лигах robocup. это быстро, находит кратчайший путь и избегает столкновений и крутых поворотов. Вы можете использовать это представление PowerPoint, чтобы понять, как он генерирует путь.
источник
Чтобы маршруты поиска маршрутов выглядели более «реалистично», я предлагаю вам ознакомиться со статьей о естественном виде A * в Game Programming Gems Vol.1
источник