reckfellENGINE

AStar2D

Поиск пути по собственному графу 2D-точек с направленными связями и весами входа.

На этой странице
class AStar2DReckfellSharpНаследует RefCounted

Создайте граф, добавьте точки через AddPoint, соедините их ConnectPoints и запросите GetIdPath или GetPointPath. Это данные маршрута: движок не строит коллизии, не перемещает персонажа и не обновляет граф вслед за Entity автоматически. Собственный экземпляр освобождайте через Dispose.

ArePointsConnected по умолчанию допускает связь в любом направлении; для направления используйте false. Частичный путь может не достичь цели: проверяйте последний ID. Отключённая начальная точка не даёт пути даже с partial.

Стоимость перехода равна _ComputeCost(fromId, toId) × weightScale назначения. Для оптимального поиска нужна допустимая согласованная эвристика. При произвольных неотрицательных стоимостях override _EstimateCost с return 0 — понятная исходная стратегия. Нативные defaults — евклидово расстояние; C# base-вызовы виртуальных методов не являются способом получить эту формулу.

Проверены небольшие графы, направление связей, веса, disabled, partial, closest-запросы и C# callbacks в Windows headless. Большие графы, параллельный поиск, физическая проходимость и другие платформы не проверялись.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

AStar2DКонструктор
# AStar2D
C#
public AStar2D();

Создаёт пустой собственный граф, не Entity уровня и не навигационную сетку. Добавьте точки и связи вручную. Dispose экземпляр, когда он больше не нужен.

Свойства1

NeighborFilterEnabledСвойство
# NeighborFilterEnabled
C#
public bool NeighborFilterEnabled { get; set; }

Включает вызовы _FilterNeighbor при обходе соседей; по умолчанию false. Возврат true из override запрещает конкретный переход. Не меняет GetPointConnections, ArePointsConnected или геометрические closest-запросы.

Методы30

AddPointvoid
# AddPoint
C#
public void AddPoint(long id, Vector2 position, float weightScale = 1f);

Добавляет точку с неотрицательным ID и конечной позицией. weightScale — конечный неотрицательный множитель стоимости входа в эту точку, по умолчанию 1. Повторный ID обновляет позицию/вес, сохраняя связи и disabled-состояние. Сам по себе вызов не создаёт рёбер. Неверные ID/отрицательные веса дают нативную диагностику; NaN/Infinity проверяйте до вызова.

Параметры
ИмяТипПо умолчанию
idlong—
positionVector2—
weightScalefloat1f
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

position

Конечная позиция в выбранной вами системе координат графа.

weightScale

Конечный множитель стоимости входа ≥0. При весах <1 проверьте эвристику.

ArePointsConnectedbool
# ArePointsConnected
C#
public bool ArePointsConnected(long id, long toId, bool bidirectional = true);

Проверяет наличие прямой связи, а не маршрута. Важно: bidirectional=true допускает ребро в ЛЮБОМ направлении, не требует пары рёбер. false проверяет только id→toId. Для проверки двусторонней проходимости вызовите метод с false в обоих направлениях. Disabled и neighbor filter эту проверку не меняют.

Параметры
ИмяТипПо умолчанию
idlong—
toIdlong—
bidirectionalbooltrue
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

bidirectional

У ArePointsConnected true принимает любое направление; у ConnectPoints/DisconnectPoints true действует на оба. false везде означает id→toId.

Возвращает bool

Наличие прямого ребра по выбранному правилу направления, не достижимость пути.

Clearvoid
# Clear
C#
public void Clear();

Удаляет все точки и связи и сбрасывает кандидат свободного ID в 0. Существующие C# массивы результатов остаются снимками. Не обещает освобождение всей зарезервированной памяти.

ConnectPointsvoid
# ConnectPoints
C#
public void ConnectPoints(long id, long toId, bool bidirectional = true);

Соединяет две существующие разные точки: по умолчанию в обе стороны; false создаёт только id→toId. Повторная связь не добавляет дубликат соседа. Не проверяет коллизии/проходимость геометрии и не перемещает персонажа.

Параметры
ИмяТипПо умолчанию
idlong—
toIdlong—
bidirectionalbooltrue
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

bidirectional

У ArePointsConnected true принимает любое направление; у ConnectPoints/DisconnectPoints true действует на оба. false везде означает id→toId.

DisconnectPointsvoid
# DisconnectPoints
C#
public void DisconnectPoints(long id, long toId, bool bidirectional = true);

Удаляет связь между существующими точками. true удаляет оба направления; false — только id→toId, сохраняя обратное, если оно было. Точки остаются. Отсутствующее ребро не создаётся.

Параметры
ИмяТипПо умолчанию
idlong—
toIdlong—
bidirectionalbooltrue
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

bidirectional

У ArePointsConnected true принимает любое направление; у ConnectPoints/DisconnectPoints true действует на оба. false везде означает id→toId.

GetAvailablePointIdlong
# GetAvailablePointId
C#
public long GetAvailablePointId();

Возвращает текущий свободный неотрицательный кандидат. Не резервирует ID: повторные запросы без AddPoint могут вернуть одно значение. После удаления кандидат может быть переиспользован; это не глобальный UUID и не обещание всегда наименьшего ID.

Возвращает long

Свободный кандидат ID без резервирования.

GetClosestPointlong
# GetClosestPoint
C#
public long GetClosestPoint(Vector2 toPosition, bool includeDisabled = false);

Ищет ближайшую точку по геометрическому расстоянию; при равенстве выбирает меньший ID. По умолчанию исключает disabled. Не проверяет маршрут, связи или neighbor filter. В исходниках начальный порог квадрата расстояния 1e20: экстремальные координаты требуют отдельной проверки.

Параметры
ИмяТипПо умолчанию
toPositionVector2—
includeDisabledboolfalse
toPosition

Конечная позиция геометрического запроса в той же системе, что позиции точек.

includeDisabled

true включает disabled-кандидатов в closest-point query; по умолчанию false.

Возвращает long

ID геометрически ближайшего допустимого кандидата либо −1, если кандидат не найден.

GetClosestPositionInSegmentVector2
# GetClosestPositionInSegment
C#
public Vector2 GetClosestPositionInSegment(Vector2 toPosition);

Проецирует позицию на ближайший существующий сегмент с двумя enabled-концами. Геометрический запрос: направление ребра и neighbor filter не определяют проекцию. Если подходящего сегмента нет, возвращает Vector2.Zero — это также допустимая позиция, а не надёжный маркер ошибки. При равных расстояниях не полагайтесь на порядок сегментов.

Параметры
ИмяТипПо умолчанию
toPositionVector2—
toPosition

Конечная позиция геометрического запроса в той же системе, что позиции точек.

Возвращает Vector2

Позиция проекции; Vector2.Zero также используется, если сегмент не найден.

GetIdPath2 перегрузки
# GetIdPath · 1/2
C#
public long[] GetIdPath(long fromId, long toId);

Возвращает ID пути от fromId к toId включительно. Оба ID должны существовать. Без достижимого пути — пустой массив; enabled fromId==toId даёт один ID, disabled start — пустой результат даже с partial. allowPartialPath=true допускает путь к лучшему достигнутому кандидату по эвристике, затем стоимости; его конец может отличаться от toId. Disabled goal не посещается. Проверяйте последний ID перед объявлением цели достигнутой. Не запускайте одновременные запросы/изменения на одном экземпляре.

Параметры
ИмяТипПо умолчанию
fromIdlong—
toIdlong—
fromId

Существующий ID начала пути или исходной точки callback.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

Возвращает long[]

Новый long[] с ID от начала к концу; пустой при отсутствии результата, partial-конец может быть не целью.

# GetIdPath · 2/2
C#
public long[] GetIdPath(long fromId, long toId, bool allowPartialPath = false);

Возвращает ID пути от fromId к toId включительно. Оба ID должны существовать. Без достижимого пути — пустой массив; enabled fromId==toId даёт один ID, disabled start — пустой результат даже с partial. allowPartialPath=true допускает путь к лучшему достигнутому кандидату по эвристике, затем стоимости; его конец может отличаться от toId. Disabled goal не посещается. Проверяйте последний ID перед объявлением цели достигнутой. Не запускайте одновременные запросы/изменения на одном экземпляре.

Параметры
ИмяТипПо умолчанию
fromIdlong—
toIdlong—
allowPartialPathboolfalse
fromId

Существующий ID начала пути или исходной точки callback.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

allowPartialPath

true разрешает завершить путь на достигнутом кандидате, когда цель недоступна. Не гарантирует достижение toId и не разрешает disabled start.

Возвращает long[]

Новый long[] с ID от начала к концу; пустой при отсутствии результата, partial-конец может быть не целью.

GetPointCapacitylong
# GetPointCapacity
C#
public long GetPointCapacity();

Возвращает ёмкость внутреннего хранилища точек, не количество созданных точек и не предельную длину пути. Для количества используйте GetPointCount.

Возвращает long

Текущая ёмкость внутреннего хранилища, не count.

GetPointConnectionslong[]
# GetPointConnections
C#
public long[] GetPointConnections(long id);

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

Параметры
ИмяТипПо умолчанию
idlong—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

Возвращает long[]

Новый long[] исходящих ID без обещания сортировки.

GetPointCountlong
# GetPointCount
C#
public long GetPointCount();

Возвращает число существующих точек, включая disabled. Это не число связей и не capacity.

Возвращает long

Число существующих точек, включая disabled.

GetPointIdslong[]
# GetPointIds
C#
public long[] GetPointIds();

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

Возвращает long[]

Новый long[] всех ID без обещания сортировки.

GetPointPath2 перегрузки
# GetPointPath · 1/2
C#
public Vector2[] GetPointPath(long fromId, long toId);

Возвращает позиции точек найденного пути в системе координат, которую вы задали при AddPoint. Правила полного/частичного пути те же, что у GetIdPath; результат не является сглаженной траекторией или гарантией отсутствия столкновений. Для проверки достижения partial-цели используйте ID-путь. Собственный C# массив можно изменять без изменения графа. Не запускайте запросы параллельно на одном экземпляре.

Параметры
ИмяТипПо умолчанию
fromIdlong—
toIdlong—
fromId

Существующий ID начала пути или исходной точки callback.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

Возвращает Vector2[]

Новый Vector2[] позиций от начала к концу; пустой при отсутствии результата.

# GetPointPath · 2/2
C#
public Vector2[] GetPointPath(long fromId, long toId, bool allowPartialPath = false);

Возвращает позиции точек найденного пути в системе координат, которую вы задали при AddPoint. Правила полного/частичного пути те же, что у GetIdPath; результат не является сглаженной траекторией или гарантией отсутствия столкновений. Для проверки достижения partial-цели используйте ID-путь. Собственный C# массив можно изменять без изменения графа. Не запускайте запросы параллельно на одном экземпляре.

Параметры
ИмяТипПо умолчанию
fromIdlong—
toIdlong—
allowPartialPathboolfalse
fromId

Существующий ID начала пути или исходной точки callback.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

allowPartialPath

true разрешает завершить путь на достигнутом кандидате, когда цель недоступна. Не гарантирует достижение toId и не разрешает disabled start.

Возвращает Vector2[]

Новый Vector2[] позиций от начала к концу; пустой при отсутствии результата.

GetPointPositionVector2
# GetPointPosition
C#
public Vector2 GetPointPosition(long id);

Читает сохранённую позицию существующего ID. Позиции графа не синхронизируются автоматически с Entity2D. Отсутствующий ID даёт диагностику и нулевой fallback, поэтому сначала проверяйте HasPoint.

Параметры
ИмяТипПо умолчанию
idlong—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

Возвращает Vector2

Сохранённая Vector2; нулевой fallback с диагностикой при неверном ID.

GetPointWeightScalefloat
# GetPointWeightScale
C#
public float GetPointWeightScale(long id);

Читает множитель стоимости входа в существующую точку. Это не стоимость конкретного ребра и не эвристика. При неверном ID нулевой fallback с диагностикой нельзя считать допустимым весом.

Параметры
ИмяТипПо умолчанию
idlong—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

Возвращает float

Множитель входа; нулевой fallback с диагностикой при неверном ID.

HasPointbool
# HasPoint
C#
public bool HasPoint(long id);

Проверяет существование ID независимо от disabled-состояния и наличия связей. Используйте до запросов, которым нужна существующая точка.

Параметры
ИмяТипПо умолчанию
idlong—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

Возвращает bool

true, если ID существует, даже когда точка disabled.

IsNeighborFilterEnabledbool
# IsNeighborFilterEnabled
C#
public bool IsNeighborFilterEnabled();

Читает флаг вызова _FilterNeighbor во время поиска. Сам флаг не гарантирует наличие override и не меняет сохранённые рёбра.

Возвращает bool

Текущее значение NeighborFilterEnabled.

IsPointDisabledbool
# IsPointDisabled
C#
public bool IsPointDisabled(long id);

Читает disabled-состояние существующей точки. Disabled start не начинает поиск; disabled сосед пропускается. Это не проверка существования ID.

Параметры
ИмяТипПо умолчанию
idlong—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

Возвращает bool

Disabled-флаг существующей точки; неверный ID не является обычным результатом.

RemovePointvoid
# RemovePoint
C#
public void RemovePoint(long id);

Удаляет существующий ID вместе с входящими и исходящими связями. Disabled вместо этого сохраняет структуру. Удалённый ID может стать следующим кандидатом GetAvailablePointId.

Параметры
ИмяТипПо умолчанию
idlong—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

ReserveSpacevoid
# ReserveSpace
C#
public void ReserveSpace(long numNodes);

Резервирует место под положительное число точек, не создавая их. Это настройка аллокаций, не генерация сетки и не ограничение максимального ID. Нулевое/отрицательное значение даёт диагностику; не используйте как команду сжатия.

Параметры
ИмяТипПо умолчанию
numNodeslong—
numNodes

Положительная желаемая ёмкость числа точек; не число создаваемых Entity.

SetNeighborFilterEnabledvoid
# SetNeighborFilterEnabled
C#
public void SetNeighborFilterEnabled(bool enabled);

Устанавливает тот же флаг, что NeighborFilterEnabled. Включите его, чтобы _FilterNeighbor действительно вызывался; одного override недостаточно.

Параметры
ИмяТипПо умолчанию
enabledbool—
enabled

Включает/выключает вызовы фильтра при поиске, не включает сами точки.

SetPointDisabledvoid
# SetPointDisabled
C#
public void SetPointDisabled(long id, bool disabled = true);

По умолчанию отключает существующую точку, false включает обратно. Точка и связи сохраняются. Disabled нельзя использовать как удаление ID или проверку существования.

Параметры
ИмяТипПо умолчанию
idlong—
disabledbooltrue
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

disabled

true отключает точку, false возвращает её в поиск.

SetPointPositionvoid
# SetPointPosition
C#
public void SetPointPosition(long id, Vector2 position);

Меняет позицию существующей точки для последующих запросов и default-стоимостей. Рёбра сохраняются; предыдущие массивы путей не обновляются. Передавайте конечные координаты в одной согласованной системе.

Параметры
ИмяТипПо умолчанию
idlong—
positionVector2—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

position

Конечная позиция в выбранной вами системе координат графа.

SetPointWeightScalevoid
# SetPointWeightScale
C#
public void SetPointWeightScale(long id, float weightScale);

Меняет конечный неотрицательный множитель стоимости входа. Он умножает _ComputeCost даже у C# override; начальная точка не получает отдельную плату входа. Значения ниже 1 могут сделать стандартную евклидову эвристику завышенной: для надёжного поиска настройте допустимую согласованную эвристику, например 0 при неотрицательных стоимостях.

Параметры
ИмяТипПо умолчанию
idlong—
weightScalefloat—
id

Существующий неотрицательный ID; для AddPoint допускается новый ID. Не индекс массива.

weightScale

Конечный множитель стоимости входа ≥0. При весах <1 проверьте эвристику.

_ComputeCostfloat
# _ComputeCost
C#
public virtual float _ComputeCost(long fromId, long toId);

Переопределяемая базовая стоимость направленного перехода между соединёнными точками. Движок дополнительно умножает её на weightScale назначения. Нативное поведение без override — евклидово расстояние. В C# base._ComputeCost возвращает default(float), а не вызывает нативную формулу: для расстояния вычислите GetPointPosition(fromId).DistanceTo(GetPointPosition(toId)) явно. Возвращайте конечную неотрицательную стоимость.

Параметры
ИмяТипПо умолчанию
fromIdlong—
toIdlong—
fromId

Существующий ID начала пути или исходной точки callback.

toId

ID другой существующей точки; у path-метода — цели, которая может быть недостижима.

Возвращает float

Конечная неотрицательная базовая стоимость; движок ещё применит вес назначения.

_EstimateCostfloat
# _EstimateCost
C#
public virtual float _EstimateCost(long fromId, long endId);

Переопределяемая эвристика оставшейся стоимости, не списываемая стоимость перехода. Без override нативный поиск использует евклидово расстояние. Для оптимального пути нужна допустимая и согласованная оценка; закрытые точки не переоткрываются. При неотрицательных стоимостях return 0 убирает завышение, но может расширить поиск. C# base._EstimateCost сам возвращает default(float), не нативное расстояние.

Параметры
ИмяТипПо умолчанию
fromIdlong—
endIdlong—
fromId

Существующий ID начала пути или исходной точки callback.

endId

Существующий ID цели, до которой оценивается оставшаяся стоимость.

Возвращает float

Конечная согласованная нижняя оценка оставшейся стоимости.

_FilterNeighborbool
# _FilterNeighbor
C#
public virtual bool _FilterNeighbor(long fromId, long neighborId);

Переопределите для запрета перехода fromId→neighborId: true пропускает соседа, false допускает обычную проверку. Вызывается только при NeighborFilterEnabled=true. Не изменяйте граф из callback и не путайте true с разрешением перехода. Это фильтр поиска, не физическая проверка коллизии.

Параметры
ИмяТипПо умолчанию
fromIdlong—
neighborIdlong—
fromId

Существующий ID начала пути или исходной точки callback.

neighborId

Существующий ID рассматриваемого исходящего соседа.

Возвращает bool

true запрещает этот переход; false не отфильтровывает его.

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

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

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

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