Nav3DAgent

Как упоминалось выше, вы можете использовать скрипт Nav3DAgent в качестве компонента для вашего игрового объекта и получить к нему доступ через GetComponent(), или вы можете создать класс-наследник, который лично мы считаем гораздо более удобным.

Для работы с Nav3DAgent были реализованы следующие публичые методы.

  • Применяет описание к вашему агенту.
public void SetDescription(Nav3DAgentDescription _Description)

  • Команда двигаться к точке. Любая действующая команда будет прервана, агент начнет движение к точке, в соответствии с параметрами его описания.
public void MoveTo(Vector3 _Point, Action _OnReach = null, Action<PathfindingError> _OnPathfindingFail = null)

  • Добавить точку следования в очередь. Таким образом может быть добавлено сколько угодно точек следования. Если агент выполняет команду FollowTarget, то она прервется и он начинает выполнять команду следование к точке.
public void MoveToEnqueue(Vector3 _Point, Action _OnReach = null, Action<PathfindingError> _OnPathfindingFail = null)

  • Команда преследовать движущийся Transform.
public void FollowTarget(
            Transform _Target,
            float _OffsetToleranceUpdate,
            float _DistToReach = 0,
            Action _OnReach = null,
            Action _OnCancel = null,
            Action<PathfindingError> _OnPathfindingFail = null
        )

Значения параметров:

  • Transform _Target — Transform, который необходимо преследовать.
  • float _OffsetToleranceUpdate — величина минимального смещения цели, которое приведет к обновлению пути к цели. Если ваш агент имеет параметр Motion Navigation Type описания установленным в значение GLOBAL, или GLOBAL_AND_LOCAL, то каждый раз при смещении преследуемого Transform более чем на _OffsetToleranceUpdate произойдет обновление пути.
  • float _DistToReach — расстояние до цели, приблизившись на которое цель будет считаться достигнутой. Хотим заметить, что в случае когда агенту приходится искать глобальный путь, цель может никогда не быть достигнутой, поскольку достигнув конца пути может оказаться, что цель за прошедшее время сдвинулась. Таким образом условие совпадения координат преследуемой цели и агента может быть труднодостижимым.
  • Action _OnReach — Делегат, который будет выполнен, когда цель будет успешно достигнута.
  • Action _OnCancel — делегат, выполняемый в случае, если ссылка на преследуемый Transform стала null, либо missing.

  • Прерывает выполнение текущей команды.
public void Stop()

  • Позволяет получить список агентов внутри радиуса _Radius от агента.  Вызов этого метода по событию Update, может негативно сказаться на производительности, поэтому рекомендуется не вызывать его слишком часто (например, нескольких раз в секунду должно быть достаточно для любых игровых сценариев).
public List<Nav3DAgent> GetAgentsInRadius(float _Radius, Predicate<Nav3DAgent> _Predicate = null)

Вы можете найти примеры использования Nav 3D Agent в демонстрационных сценах, расположенных в папке Demo ресурса.