Nav3DAgentDescription

Nav3DAgentDescription

Nav3DAgentDescription

служит описанием агента и позволяет настроить его поведение и все необходимые параметры.
Этот класс наследуется от ScriptableObject, поэтому вы можете создать его экземпляр через контекстное меню вкладки Project.


После создания описания в его инспекторе вы увидите следующий список групп параметров:

Кнопка «Set default parameters» ускорит настройку всех параметров, установив их значения по умолчанию.

Ниже приводится объяснение назначения параметров и их допустимых значений.


Behavior


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Behavior TypeBehavior Typeenum BehaviorTypeDEFAULT, YIELDING, INDIFFERENT

Описывает тип поведения агента:

  • Агент может вести себя стандартным образом (DEFAULT), т.е. искать путь, затем следовать по нему или следовать любым другим инструкциям пользователя. Поведение агента будет полностью определяться его описанием.
  • Агент может обладать уступчивым поведением (YIELDING). Он не сможет выполнять команды пользователя и не будет иметь своих собственных задач.
    (Исключение будет выдано, если вы попытаетесь вызвать методы для перехода к цели.) Его единственной заботой будет уступить дорогу агентам поблизости. Он будет взаимодействовать с ними, используя механизм локального уклонения, в соответствии с его параметрами скорости и радиуса в описании.

Также агент может быть индифферентным (INDIFFERENT).
Агент ничего не будет делать, он просто будет там. Другие агенты смогут обойти его при выполнении локального обхода. Попытка вызвать методы для следования к цели с таким типом поведения приведет к возникновению исключения, аналогичного получению.

OptionProperty name in Nav3DAgentDescriptionTypeValue range
Motion Navigation TypeMotionNavigationTypeenum MotionNavigationTypeGLOBAL, GLOBAL_AND_LOCAL, LOCAL

Основная цель всех агентов — двигаться к какой-либо цели, будь то другой агент или точка в пространстве. Агенты могут перемещаться, используя три способа ориентации в пространстве:

  • Используя глобальный путь (GLOBAL). В этом случае агент будет искать путь и будет двигаться по нему, независимо от внешних условий (другие агенты или края препятствий, которые находятся слишком близко).
  • Используя только локальное избегание (LOCAL). Агент не будет использовать поиск пути для передвижения, но будет двигаться к цели по прямой линии, уклоняясь от других агентов и препятствий на пути, когда они встречаются по ходу движения. Конечно, не каждое препятствие можно преодолеть таким образом.
  • Наконец, агент может двигаться к цели, используя поиск пути и локальное уклонение одновременно

Radius


OptionProperty name in Nav3DAgentDescriptionTypeValue range
RadiusRadiusfloat>0

Радиус действия агента используется для выполнения локальных маневров уклонения. Установление правильного радиуса важно для эффективного локального обхода как самим агентом, так и другими агентами поблизости. Мы советуем вам настроить радиус таким образом, чтобы весь визуальный контент игрового юнита, которым является агент, находился внутри сферы заданного радиуса.


Speed


OptionProperty name in Nav3DAgentDescriptionTypeValue range
SpeedSpeedfloat>0

Скорость агента. Вы можете изменить ее в любое время, если это необходимо.


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Max SpeedMax Speedfloat>Speed

Максимальная скорость агента. Этот параметр необходим для выполнения локального обхода. В некоторых ситуациях агенту может потребоваться ускорить ход, чтобы избежать столкновения. Если значение установлено слишком высоким, агент может иногда двигаться рывками при выполнении локального обхода. Поэтому мы советуем вам установить максимальную скорость немного больше, чем Speed (менее чем в полтора раза больше).

Для вашего удобства в инспекторе есть два способа установить это значение. С определенным значением. Или используя множитель для увеличения скорости. Мы рекомендуем использовать множитель, чтобы максимальная скорость зависела от скорости агента. Затем максимальная скорость будет меняться вслед за изменением скорости в любое время.


Local avoidance


OptionProperty name in Nav3DAgentDescriptionTypeValue range
ORCA TauORCATaufloat>0

Временной диапазон для расчета скоростного препятствия (VO). Мы не рекомендуем изменять этот параметр.

Чтобы лучше понять его значение, оригинальная статья об ORCA:  Reciprocal n-body Collision Avoidance. Jur van den Berg, Stephen J. Guy, Ming Lin, and Dinesh Manocha


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Agents considered number limitAgents considered number limitbooltrue, false

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


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Agents numberConsideredAgentsNumberLimitint>=1

Количество агентов, которые принимаются во внимание от всех близлежащих агентов.


Pathfinding


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Pathfinding timeout (ms)PathfindingTimeoutint>0

Максимальное время, разрешенное для выполнения поиска пути. Если это время будет превышено, поиск пути будет отменен и будет вызван обратный вызов _OnPathfindingFail.


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Smooth the pathSmoothPathbooltrue, false

Нужно ли сглаживать найденный путь.


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Samples per min bucket volumeSmoothRatioint>0

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

OptionProperty name in Nav3DAgentDescriptionTypeValue range
Auto-update path on stagnant behaviorAutoUpdatePathbooltrue, false

При использовании механизма локального избегания в сочетании с глобальным поиском пути может возникнуть ситуация, когда путь проходит через область пространства, где присутствует много других агентов. Тогда наш агент может отклониться от найденного пути, стараясь избегать столкновений с другими агентами. Этот процесс может продолжаться сколь угодно долго, поскольку, пытаясь вернуться на исходную траекторию, агент всегда будет снова отклоняться от нее, встречаясь с другими агентами.

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


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Auto-update cooldown (ms)PathAutoUpdateCooldownint>=1

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


Motion


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Target reach distanceTargetReachDistancefloat>=0

Расстояние, необходимое для достижения цели. Когда вы приказываете агенту достичь цели, цель будет считаться достигнутой, когда точка поворота агента совпадает с координатой цели (расстояние между ними будет равно 0). Это может быть неудобно, если целью является зацепленный объект, скажем, планета в космосе. В этом случае установите этот параметр равным сумме радиуса видимой части агента и радиуса планеты. Затем агент остановится, когда достигнет поверхности планеты.


OptionProperty name in Nav3DAgentDescriptionTypeValue range
Max rotation in degrees per fixed update tickMaxAgentDegreesRotationPerTickfloat>=0

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


Velocity blending


При использовании глобального поиска пути и локального обхода агент перемещается, используя три вектора скорости:

  1. Вектор скорости вдоль траектории.
  2. Вектор скорости уклонения от ближайших агентов.
  3. Вектор скорости обхода препятствия.

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

Не все три скорости могут быть смешаны во всех ситуациях. Например, рядом с агентом может не быть препятствий, тогда будут смешаны только скорость следования по пути и скорость уклонения от ближайших агентов.

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

Ниже приведены пояснения к параметрам веса. Обратите внимание, что для каждой ситуации используются отдельные параметры.

Все веса являются плавающими и должны быть больше 0.

Соответствующими именами свойств в Nav3DAgentDescription являются:

  • PathVelocityWeight
  • PathVelocityWeight1
  • PathVelocityWeight2
  • AgentsAvoidanceVelocityWeight
  • AgentsAvoidanceVelocityWeight1
  • AgentsAvoidanceVelocityWeight2
  • ObstacleAvoidanceVelocityWeight
  • ObstacleAvoidanceVelocityWeight1
  • ObstacleAvoidanceVelocityWeight2