Области навигации определяют, насколько сложно пройти через конкретную область, при поиске пути будут предпочтительны области с более низкой стоимостью. Кроме того, каждая NavMeshсетка, которую Unity создает для аппроксимации пешеходных зон и препятствий в вашей среде для поиска пути и навигации под управлением ИИ. . Подробнее
См. в Словарь Агент имеет Маску области, которая можно использовать для указания областей, в которые может перемещаться агент.
В приведенном выше примере типы областей используются в двух распространенных случаях:
- Прогулка по территории воды становится более затратной, так как ей назначается более высокая стоимость, чтобы справиться со сценарием, когда прогулка по мелководью медленнее.
- Доступ к двери предоставляется определенным персонажам, чтобы создать сценарий, в котором люди могут проходить через двери, а зомби – нет.
Тип области может быть назначен каждому объекту, включенному в запекание NavMesh, кроме того, каждая ссылка вне сетки имеет свойство для указания типа области.
Стоимость поиска пути
Короче говоря, стоимость позволяет вам контролировать, какие области отдает предпочтение первооткрывателю при поиске пути. Например, если вы установите стоимость области равной 3,0, путешествие по этой области считается в три раза более продолжительным, чем альтернативные маршруты.
Чтобы полностью понять, как работает стоимость, давайте посмотрим, как работает навигатор.
Unity использует A* для расчета кратчайшего пути в NavMesh. A* работает с графом связанных узлов. Алгоритм начинается с ближайшего узла к началу пути и посещает соединительные узлы, пока не будет достигнут пункт назначения.
Поскольку навигационное представление Unity представляет собой сеткуосновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
Посмотрите в Словарь полигонов. Первое, что должен сделать навигатор, это поместите точку на каждом полигоне, которая является местоположением узла. Затем вычисляется кратчайший путь между этими узлами.
Желтые точки и линии на приведенном выше рисунке показывают, как узлы и связи размещаются в NavMesh и в каком порядке они проходятся во время A*.
Стоимость перемещения между двумя узлами зависит от пройденного расстояния и стоимости, связанной с типом области многоугольника под ссылкой, то есть расстояние * стоимость. На практике это означает, что если стоимость площади равна 2,0, то расстояние по такому многоугольнику окажется в два раза больше. Алгоритм A* требует, чтобы все затраты были больше 1,0.
Влияние затрат на результирующий путь сложно настроить, особенно для более длинных путей. Лучший способ приблизиться к затратам — относиться к ним как к намекам. Например, если вы хотите, чтобы агенты не слишком часто использовали Off-Mesh Links, вы можете увеличить их стоимость. Но может быть сложно настроить поведение, при котором агенты предпочитают ходить по тротуарам.
Еще одна вещь, которую вы можете заметить на некоторых уровнях, это то, что проводник не всегда выбирает самый короткий путь. Причиной этого является размещение узла. Эффект может быть заметен в сценариях, где большие открытые области находятся рядом с крошечными препятствиями, что приводит к навигационной сетке с очень большими и маленькими полигонами. В таких случаях узлы больших полигонов могут располагаться в любом месте большого полигона, и с точки зрения проводника пути это выглядит как объезд.
Стоимость для типа области может быть установлена глобально на вкладке Области, или вы можете переопределить их для каждого агента с помощью сценария.
Типы областей

Типы областей указываются на вкладке Области Окна навигации. Существует 29 настраиваемых типов и 3 встроенных типа: Доступно для ходьбы, Недоступно для ходьбы и Прыжок.
- Пешеходная – это общий тип области, указывающий, что по ней можно ходить.
- Недоступная для ходьбы – это общий тип области, запрещающий навигацию. Это полезно в тех случаях, когда вы хотите пометить определенный объект как препятствие, но не наложить на него NavMesh.
- Переход — это тип области, который назначается всем автоматически созданным ссылкам вне сети.
Если несколько объектов с разными типами областей перекрываются, результирующий тип области навигационной сетки обычно будет иметь самый высокий индекс. Однако есть одно исключение: Not Walkable всегда имеет приоритет. Это может быть полезно, если вам нужно заблокировать область.
Маска области
У каждого агента есть Маска области, которая описывает области, которые он может использовать при навигации. Маску области можно задать в свойствах агента, а битовой маской можно управлять с помощью скрипта во время выполнения.
Маска области полезна, когда вы хотите, чтобы только персонажи определенных типов могли проходить через область. Например, в игре с уклонением от зомби вы можете пометить область под каждой дверью типом области Дверь и снять отметку с области двери в маске области персонажа-зомби.
Дополнительная литература
- Построение NavMesh — рабочий процесс для запекания NavMesh.
- NavMeshAgent.areaMask — API-скрипт для установки маски области для агента.
- NavMeshAgent.SetAreaCost() – скрипт API для установки стоимости площади для агента.