reckfellENGINE

Прямой путь 2D и 3D: запрос и проверка

Получить точки и отличить полный маршрут от спроецированного.

На этой странице

NavigationServer2D.MapGetPath возвращает Vector2[], NavigationServer3D.MapGetPath — Vector3[]. Для прямого запроса не нужен отдельный NavigationAgent, но нужна живая карта с опубликованной навигационной геометрией.

Получить точки

Передайте RID нужной карты, старт и цель в глобальных координатах карты, режим обработки и маску слоёв. В существующем регионе карту можно получить через GetNavigationMap(). Для стандартного мира — GetWorld2D().NavigationMap или GetWorld3D().NavigationMap внутри подходящей Entity в дереве.

Сохраните SimplePaths.cs в C#-проекте Reckfell 1.0.0:

C#
using Reckfell;
using System;

public static class SimplePaths
{
    public static Vector2[] Find2D(Rid map, Vector2 start, Vector2 target,
        uint layers = 1, bool optimize = true)
    {
        if (!map.IsValid || layers == 0 || NavigationServer2D.MapGetIterationId(map) == 0)
            return Array.Empty<Vector2>();
        return NavigationServer2D.MapGetPath(map, start, target, optimize, layers);
    }

    public static Vector3[] Find3D(Rid map, Vector3 start, Vector3 target,
        uint layers = 1, bool optimize = true)
    {
        if (!map.IsValid || layers == 0 || NavigationServer3D.MapGetIterationId(map) == 0)
            return Array.Empty<Vector3>();
        return NavigationServer3D.MapGetPath(map, start, target, optimize, layers);
    }
}

Вызывайте Find2D или Find3D с RID своей размерности. Помощник возвращает пустой массив для нулевого RID, маски 0 или ещё не опубликованной карты. Он не определяет, был ли ненулевой RID уже освобождён: временем жизни карты должен управлять вызывающий код.

Для проверенной поверхности x=0–10 путь от (1, 5) до (9, 5) заканчивается у (9, 5). После добавления соприкасающегося региона x=10–20 на ту же карту доступна цель (19, 5). На другой карте тот же регион не участвует в поиске.

Проверить результат

  1. Если массив пуст, не читайте path[0]. Проверьте геометрию, карту, маску и синхронизацию.
  2. Сравните первую точку со стартом: старт за пределами разрешённой поверхности может быть спроецирован.
  3. Сравните последнюю точку с целью с допуском вашей игры. При недостижимой цели возвращается частичный маршрут, а не обязательно пустой массив.
  4. Если принимаете частичный путь, сделайте это явным решением игровой логики. Не объявляйте цель достигнутой только по наличию точек.

Готовый вариант проверки обоих концов есть в объектах запроса пути. Навигационная связь может содержать переход через пустоту: путь не обещает непрерывный физический пол под всеми его точками. Для таких участков нужна логика перехода.

Что меняет optimize

true соответствует обработке Corridorfunnel: путь сокращается внутри найденного коридора полигонов. false соответствует Edgecentered: промежуточные точки располагаются в центрах пересекаемых рёбер. Это не выключение поиска A* и не обещание более быстрого запроса. Оба соответствия проверены сравнением с QueryPath на одной карте.

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

Как использовать путь для движения

Храните текущий индекс точки. Перейдите к следующей, когда персонаж подошёл к ней с допустимой погрешностью; завершите маршрут после последней точки. Для физического персонажа применяйте соответствующий API движения тела, а не прямую подмену позиции: первый персонаж 3D.

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

Проверены точные помощники 2D/3D, полный и спроецированный результат, изоляция карт, нулевая маска и соответствие режимов обработки 2D. Физическое следование пути, сложные меши, производительность и качество оптимизации не проверены этим набором.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.