Я создаю 2.5d игру в Unity. Земля на сцене сделана с помощью Rectangular Tilemap. Сама земля находится на одном уровне по Z. Есть высоты, которые реализованы с помощью OrderInLayer и коллайдеров. Фактически, на сцене есть 3 уровня высоты (отмечены цифрами на рисунке). Каждый уровень состоит из зон с коллайдерами (чтобы с нижнего уровня нельзя было перейти на верхний) и без коллайдеров (например, чтобы игрок мог пройти за скалами). Переход между уровнями происходит при прохождении лестницы (L на рисунке), на которой есть коллайдер, который меняет OrderInLayer и слой сущности. В LayerCollisionMatrix все настроено так, что сущность не взаимодействует с коллайдерами на своем уровне, но взаимодействует с коллайдерами на других уровнях
Я хочу добавить врагов, которые будут следовать за игроком и избегать препятствий. Как я могу это сделать? С помощью NavMesh? С помощью своей собственной реализации алогритма или с помощью сторонних библиотек? Как мне это реализовать?
Я попробовал использовать встроенный NavMesh с дополнением NavMeshPlus. Я создал три объекта с NavMeshSurface на каждом, настроил включенные слои и запек их. Оказалось, что NavMeshSurfaces пересекаются на лестнице. Автоматически враг просто застревал на лестнице. Встроенный NavMeshLink не помог (я просто не мог задать его ширину). Поэтому я написал собственную реализацию NavMeshLink. Но это не очень помогло, потому что враг все равно предпочитает застрять в стене, чем пройти по лестнице
Я попробовал использовать A* Pathfinding Project. Я создал 3 Grid Graph и настроил их по слоям. Враг не хотел просто так перемещаться между графами. Встроенные Link и Link2 не помогли. Я не писал собственную реализацию Link, но думаю, что ситуация будет похожа на NavMesh
Как сделан уровень
LayerCollisionMatrix
Враг предпочитает уткнуться в стену, чем пройти через лестницу
NavMesh