reckfellENGINE

AStarGrid2D

Поиск пути по прямоугольной сетке с препятствиями, диагоналями и весами клеток.

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

Порядок работы: задайте Region, CellSize, Offset и CellShape → вызовите Update() → нанесите SetPointSolid/веса → запросите путь. Dirty-перестройка сбрасывает препятствия и веса, а чистый Update() ничего не меняет. Клетки и связи создаются автоматически; это не Entity и не физический мир.

ID — Vector2I внутри Region с исключённым концом; результат GetPointPath — Vector2 в заданном отображении. Стандартные стоимости считают расстояние между ID, не масштабированные мировые позиции. Настройте правило диагоналей под препятствия, а эвристику — под стоимость перемещения.

JumpingEnabled в 1.0.0 игнорирует веса и может возвращать несмежные jump-точки. Для карты с ценой местности используйте обычный поиск. Partial-путь не доказывает достижение цели: сравните последний ID; solid start не даёт пути. Для изменения геометрии сначала перестройте сетку и заново примените cell overrides.

Собственный экземпляр освобождайте через Dispose. Проверены небольшие сетки, отрицательное начало, геометрия, сброс состояния, диагонали, jumping/веса и C# callbacks в Windows headless. Большие карты, параллельный поиск, произвольные custom costs с jumping и физическая проходимость не проверялись.

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

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

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

Создаёт пустую сетку. Задайте Region, CellSize/Offset/CellShape, вызовите Update, затем примените препятствия и веса. Соединения соседних клеток создаются алгоритмом, ConnectPoints не нужен. Собственный RefCounted-экземпляр освобождайте через Dispose.

Свойства9

CellShapeСвойство
# CellShape
C#
public AStarGrid2D.CellShapeEnum CellShape { get; set; }

Выбирает Square, IsometricRight или IsometricDown для преобразования ID в позиции. Изменение требует Update. Изометрическое отображение не строит коллизии и не меняет ID или правило соседства DiagonalMode. Значение Max — граница enum, не форма.

CellSizeСвойство
# CellSize
C#
public Vector2 CellSize { get; set; }

Масштаб геометрического отображения ID в Vector2. Для Square позиция = Offset + Vector2(id) * CellSize; ID не отсчитывается от начала Region. Изменение требует Update со сбросом cell overrides. Стандартные стоимости используют ID, поэтому этот масштаб не задаёт стоимость пути в мировых единицах. Передавайте конечный осмысленный размер.

DefaultComputeHeuristicСвойство
# DefaultComputeHeuristic
C#
public AStarGrid2D.Heuristic DefaultComputeHeuristic { get; set; }

Формула базовой стоимости перехода без _ComputeCost override. Работает по разности целочисленных ID: Euclidean=sqrt(dx²+dy²), Manhattan=dx+dy, Octile=max(dx,dy)+(sqrt(2)−1)*min(dx,dy), Chebyshev=max(dx,dy). Не зависит от CellSize/Offset. При обычном поиске ещё умножается на вес назначения. Меняется без Update.

DefaultEstimateHeuristicСвойство
# DefaultEstimateHeuristic
C#
public AStarGrid2D.Heuristic DefaultEstimateHeuristic { get; set; }

Формула оценки оставшейся стоимости без _EstimateCost override; не фактическая плата за переход. Должна не завышать и быть согласована с перемещениями и весами. Manhattan подходит 4-направленной сетке; не выбирайте его автоматически для дешёвых диагоналей. Веса <1/custom costs могут потребовать собственного return 0. Меняется без Update.

DiagonalModeСвойство
# DiagonalMode
C#
public AStarGrid2D.DiagonalModeEnum DiagonalMode { get; set; }

Правило диагоналей, меняется без Update: Always разрешает срезать угол даже между двумя solid-соседями; Never оставляет 4 направления; AtLeastOneWalkable требует хотя бы одну свободную боковую клетку; OnlyIfNoObstacles — обе. Диагональная целевая клетка всегда должна быть свободна. Это клеточное правило, не проверка радиуса персонажа.

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

Включает Jump Point Search без перестройки. В 1.0.0 эта ветка игнорирует weight_scale: дорогие клетки могут перестать обходиться. Результат может содержать только jump-точки без промежуточных соседних клеток; не считайте соседние элементы массива обязательно смежными. Используйте для подходящей однородной сетки; ускорение не гарантировано для любого случая.

OffsetСвойство
# Offset
C#
public Vector2 Offset { get; set; }

Смещение выдаваемых Vector2-позиций, а не ID клеток или границ Region. Изменение помечает dirty. После Update позиции пересчитаются, solid/веса будут сброшены. Приблизительно равное значение может не пометить dirty.

RegionСвойство
# Region
C#
public Rect2I Region { get; set; }

Прямоугольник целочисленных ID клеток: начало включено, конец исключён; начало может быть отрицательным. Размеры должны быть ≥0. Изменение помечает сетку dirty; перед доступом к клеткам/путям нужен Update. Перестройка сбросит solid и weight_scale: применяйте их после Update.

SizeСвойство · Устарело
# Size
C#
public Vector2I Size { get; set; }

Устаревшее C# свойство размера Region без управления его началом; используйте Region. Это не размер пикселя клетки. Запись изменённого размера требует Update и теряет cell overrides при перестройке.

Методы37

Clearvoid
# Clear
C#
public void Clear();

Очищает точки и делает Region пустым; не возвращает все настройки к defaults. Offset, CellSize и политики поиска сохраняются. Для новой карты задайте новый непустой Region, вызовите Update и снова нанесите препятствия/веса. Не используйте Clear как сброс только препятствий.

FillSolidRegionvoid
# FillSolidRegion
C#
public void FillSolidRegion(Rect2I region, bool solid = true);

В готовой сетке ставит solid для пересечения переданного прямоугольника с Region; конец исключён. Клетки вне пересечения не меняются. Не требует Update; последующая dirty-перестройка сбросит значения. Пустое пересечение ничего не меняет.

Параметры
ИмяТипПо умолчанию
regionRect2I—
solidbooltrue
region

Прямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.

solid

true ставит препятствие, false снимает; по умолчанию true.

FillWeightScaleRegionvoid
# FillWeightScaleRegion
C#
public void FillWeightScaleRegion(Rect2I region, float weightScale);

Задаёт одинаковый конечный вес ≥0 клеткам пересечения с Region; не помечает dirty. Это не добавление к старому весу. В jumping-режиме веса игнорируются, при dirty Update сбрасываются в 1.

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

Прямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.

weightScale

Конечный множитель входа ≥0; JumpingEnabled его игнорирует.

GetCellShapeAStarGrid2D.CellShapeEnum
# GetCellShape
C#
public AStarGrid2D.CellShapeEnum GetCellShape();

Читает текущее CellShape; ничего не перестраивает. Выбирает Square, IsometricRight или IsometricDown для преобразования ID в позиции. Изменение требует Update. Изометрическое отображение не строит коллизии и не меняет ID или правило соседства DiagonalMode. Значение Max — граница enum, не форма.

Возвращает AStarGrid2D.CellShapeEnum

Текущее значение CellShape; см. единицы и ограничения в описании.

GetCellSizeVector2
# GetCellSize
C#
public Vector2 GetCellSize();

Читает текущее CellSize; ничего не перестраивает. Масштаб геометрического отображения ID в Vector2. Для Square позиция = Offset + Vector2(id) * CellSize; ID не отсчитывается от начала Region. Изменение требует Update со сбросом cell overrides. Стандартные стоимости используют ID, поэтому этот масштаб не задаёт стоимость пути в мировых единицах. Передавайте конечный осмысленный размер.

Возвращает Vector2

Текущее значение CellSize; см. единицы и ограничения в описании.

GetDefaultComputeHeuristicAStarGrid2D.Heuristic
# GetDefaultComputeHeuristic
C#
public AStarGrid2D.Heuristic GetDefaultComputeHeuristic();

Читает текущее DefaultComputeHeuristic; ничего не перестраивает. Формула базовой стоимости перехода без _ComputeCost override. Работает по разности целочисленных ID: Euclidean=sqrt(dx²+dy²), Manhattan=dx+dy, Octile=max(dx,dy)+(sqrt(2)−1)*min(dx,dy), Chebyshev=max(dx,dy). Не зависит от CellSize/Offset. При обычном поиске ещё умножается на вес назначения. Меняется без Update.

Возвращает AStarGrid2D.Heuristic

Текущее значение DefaultComputeHeuristic; см. единицы и ограничения в описании.

GetDefaultEstimateHeuristicAStarGrid2D.Heuristic
# GetDefaultEstimateHeuristic
C#
public AStarGrid2D.Heuristic GetDefaultEstimateHeuristic();

Читает текущее DefaultEstimateHeuristic; ничего не перестраивает. Формула оценки оставшейся стоимости без _EstimateCost override; не фактическая плата за переход. Должна не завышать и быть согласована с перемещениями и весами. Manhattan подходит 4-направленной сетке; не выбирайте его автоматически для дешёвых диагоналей. Веса <1/custom costs могут потребовать собственного return 0. Меняется без Update.

Возвращает AStarGrid2D.Heuristic

Текущее значение DefaultEstimateHeuristic; см. единицы и ограничения в описании.

GetDiagonalModeAStarGrid2D.DiagonalModeEnum
# GetDiagonalMode
C#
public AStarGrid2D.DiagonalModeEnum GetDiagonalMode();

Читает текущее DiagonalMode; ничего не перестраивает. Правило диагоналей, меняется без Update: Always разрешает срезать угол даже между двумя solid-соседями; Never оставляет 4 направления; AtLeastOneWalkable требует хотя бы одну свободную боковую клетку; OnlyIfNoObstacles — обе. Диагональная целевая клетка всегда должна быть свободна. Это клеточное правило, не проверка радиуса персонажа.

Возвращает AStarGrid2D.DiagonalModeEnum

Текущее значение DiagonalMode; см. единицы и ограничения в описании.

GetIdPath2 перегрузки
# GetIdPath · 1/2
C#
public Reckfell.Collections.Array<Vector2I> GetIdPath(Vector2I fromId, Vector2I toId);

Возвращает клеточные ID от начала к концу, включая endpoints. Сетка должна быть clean, оба ID — в Region, даже для partial. Solid start даёт пустой результат, свободный fromId==toId — один ID. При недостижимой/solid цели partial=false даёт пустой массив; true может закончить на достигнутом кандидате. Проверяйте последний ID перед объявлением достижения. Jumping может опускать промежуточные клетки. Не запускайте параллельные поиски/изменения на одном экземпляре.

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

ID начала пути/перехода в Region; для поиска клетка должна быть свободной.

toId

ID цели/назначения в Region; partial не разрешает выйти за Region.

Возвращает Reckfell.Collections.Array<Vector2I>

Новый типизированный Array<Vector2I>; пустой без результата, partial может не достичь цели. Тип не имеет Dispose.

# GetIdPath · 2/2
C#
public Reckfell.Collections.Array<Vector2I> GetIdPath(Vector2I fromId, Vector2I toId, bool allowPartialPath = false);

Возвращает клеточные ID от начала к концу, включая endpoints. Сетка должна быть clean, оба ID — в Region, даже для partial. Solid start даёт пустой результат, свободный fromId==toId — один ID. При недостижимой/solid цели partial=false даёт пустой массив; true может закончить на достигнутом кандидате. Проверяйте последний ID перед объявлением достижения. Jumping может опускать промежуточные клетки. Не запускайте параллельные поиски/изменения на одном экземпляре.

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

ID начала пути/перехода в Region; для поиска клетка должна быть свободной.

toId

ID цели/назначения в Region; partial не разрешает выйти за Region.

allowPartialPath

true разрешает закончить на достигнутом кандидате, но не на solid start или вне Region.

Возвращает Reckfell.Collections.Array<Vector2I>

Новый типизированный Array<Vector2I>; пустой без результата, partial может не достичь цели. Тип не имеет Dispose.

GetOffsetVector2
# GetOffset
C#
public Vector2 GetOffset();

Читает текущее Offset; ничего не перестраивает. Смещение выдаваемых Vector2-позиций, а не ID клеток или границ Region. Изменение помечает dirty. После Update позиции пересчитаются, solid/веса будут сброшены. Приблизительно равное значение может не пометить dirty.

Возвращает Vector2

Текущее значение Offset; см. единицы и ограничения в описании.

GetPointDataInRegionReckfell.Collections.Array<Reckfell.Collections.Dictionary>
# GetPointDataInRegion
C#
public Reckfell.Collections.Array<Reckfell.Collections.Dictionary> GetPointDataInRegion(Rect2I region);

Возвращает новые Dictionary для пересечения с Region: id:Vector2I, position:Vector2, solid:bool, weight_scale:float. Сетка должна быть готова. Изменение Dictionary не меняет сетку. Полученные собственные Dictionary wrappers освобождайте после использования; типизированный Array не имеет Dispose.

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

Прямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.

Возвращает Reckfell.Collections.Array<Reckfell.Collections.Dictionary>

Типизированный Array<Dictionary> снимков клеток пересечения; может быть пустым.

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

Возвращает Vector2-позиции найденного пути; условия и partial-правила те же, что GetIdPath. Геометрия берётся из CellSize/Offset/CellShape, а не из Entity transforms. Это не сглаживание, физическая проходимость или управление персонажем. Jumping может пропускать промежуточные клетки; массив — независимый снимок.

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

ID начала пути/перехода в Region; для поиска клетка должна быть свободной.

toId

ID цели/назначения в Region; partial не разрешает выйти за Region.

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

Новый независимый Vector2[] позиций пути; может быть пустым или partial.

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

Возвращает Vector2-позиции найденного пути; условия и partial-правила те же, что GetIdPath. Геометрия берётся из CellSize/Offset/CellShape, а не из Entity transforms. Это не сглаживание, физическая проходимость или управление персонажем. Jumping может пропускать промежуточные клетки; массив — независимый снимок.

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

ID начала пути/перехода в Region; для поиска клетка должна быть свободной.

toId

ID цели/назначения в Region; partial не разрешает выйти за Region.

allowPartialPath

true разрешает закончить на достигнутом кандидате, но не на solid start или вне Region.

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

Новый независимый Vector2[] позиций пути; может быть пустым или partial.

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

Возвращает рассчитанную Vector2-позицию готовой клетки. Для Square это Offset + Vector2(id) * CellSize, без вычитания Region.Position; изометрические формы используют половину размера и преобразованные оси. Это не автоматическая world-позиция Entity.

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

ID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.

Возвращает Vector2

Рассчитанная Vector2; при dirty/неверном ID — диагностика и нулевой fallback.

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

Читает сохранённый вес готовой клетки. Значение не доказывает, что jumping-поиск его учитывает. Dirty/неверный ID даёт диагностику и нулевой fallback.

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

ID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.

Возвращает float

Сохранённый вес; нулевой fallback при ошибке не является корректным чтением.

GetRegionRect2I
# GetRegion
C#
public Rect2I GetRegion();

Читает текущее Region; ничего не перестраивает. Прямоугольник целочисленных ID клеток: начало включено, конец исключён; начало может быть отрицательным. Размеры должны быть ≥0. Изменение помечает сетку dirty; перед доступом к клеткам/путям нужен Update. Перестройка сбросит solid и weight_scale: применяйте их после Update.

Возвращает Rect2I

Текущее значение Region; см. единицы и ограничения в описании.

GetSizeVector2I
# GetSize
C#
public Vector2I GetSize();

Читает только Region.Size. Метод SDK не помечен Obsolete, хотя свойство Size помечено; для нового кода читайте Region.Size. Не возвращает CellSize и не перестраивает сетку.

Возвращает Vector2I

Текущее значение Size; см. единицы и ограничения в описании.

IsDirtybool
# IsDirty
C#
public bool IsDirty();

Сообщает, что геометрия изменена и нужен Update. false не означает непустую/проходимую сетку: новый экземпляр имеет пустой Region и dirty=false. IsInBounds проверяет Region, но не готовность клеточных данных.

Возвращает bool

true при отложенной перестройке; false не доказывает непустую карту.

IsInBoundsbool
# IsInBounds
C#
public bool IsInBounds(int x, int y);

Проверяет x/y по текущему Region с исключённой конечной границей. Не проверяет solid, достижимость, dirty или наличие уже перестроенных данных.

Параметры
ИмяТипПо умолчанию
xint—
yint—
x

Целочисленная X-координата ID, не мировая позиция.

y

Целочисленная Y-координата ID, не мировая позиция.

Возвращает bool

Попадание ID в Region независимо от dirty/solid.

IsInBoundsvbool
# IsInBoundsv
C#
public bool IsInBoundsv(Vector2I id);

Та же проверка Region, что IsInBounds, с ID Vector2I. Попадание в Region не разрешает обращаться к dirty-сетке до Update.

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

ID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.

Возвращает bool

Попадание ID в Region независимо от dirty/solid.

IsJumpingEnabledbool
# IsJumpingEnabled
C#
public bool IsJumpingEnabled();

Читает текущее JumpingEnabled; ничего не перестраивает. Включает Jump Point Search без перестройки. В 1.0.0 эта ветка игнорирует weight_scale: дорогие клетки могут перестать обходиться. Результат может содержать только jump-точки без промежуточных соседних клеток; не считайте соседние элементы массива обязательно смежными. Используйте для подходящей однородной сетки; ускорение не гарантировано для любого случая.

Возвращает bool

Текущее значение JumpingEnabled; см. единицы и ограничения в описании.

IsPointSolidbool
# IsPointSolid
C#
public bool IsPointSolid(Vector2I id);

Читает препятствие готовой клетки в Region. При dirty или неверном ID нативный fallback false сопровождается ошибкой: это не доказательство проходимости. Проверяйте IsDirty и IsInBoundsv до вызова.

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

ID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.

Возвращает bool

Solid-флаг; diagnosed false при ошибке не означает свободную клетку.

SetCellShapevoid
# SetCellShape
C#
public void SetCellShape(AStarGrid2D.CellShapeEnum cellShape);

Устанавливает CellShape. Выбирает Square, IsometricRight или IsometricDown для преобразования ID в позиции. Изменение требует Update. Изометрическое отображение не строит коллизии и не меняет ID или правило соседства DiagonalMode. Значение Max — граница enum, не форма.

Параметры
ИмяТипПо умолчанию
cellShapeAStarGrid2D.CellShapeEnum—
cellShape

Square, IsometricRight или IsometricDown; не Max.

SetCellSizevoid
# SetCellSize
C#
public void SetCellSize(Vector2 cellSize);

Устанавливает CellSize. Масштаб геометрического отображения ID в Vector2. Для Square позиция = Offset + Vector2(id) * CellSize; ID не отсчитывается от начала Region. Изменение требует Update со сбросом cell overrides. Стандартные стоимости используют ID, поэтому этот масштаб не задаёт стоимость пути в мировых единицах. Передавайте конечный осмысленный размер.

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

Конечный масштаб геометрии клеток; default-стоимости работают по ID.

SetDefaultComputeHeuristicvoid
# SetDefaultComputeHeuristic
C#
public void SetDefaultComputeHeuristic(AStarGrid2D.Heuristic heuristic);

Устанавливает DefaultComputeHeuristic. Формула базовой стоимости перехода без _ComputeCost override. Работает по разности целочисленных ID: Euclidean=sqrt(dx²+dy²), Manhattan=dx+dy, Octile=max(dx,dy)+(sqrt(2)−1)*min(dx,dy), Chebyshev=max(dx,dy). Не зависит от CellSize/Offset. При обычном поиске ещё умножается на вес назначения. Меняется без Update.

Параметры
ИмяТипПо умолчанию
heuristicAStarGrid2D.Heuristic—
heuristic

Euclidean, Manhattan, Octile или Chebyshev; согласуйте с переходами и весами.

SetDefaultEstimateHeuristicvoid
# SetDefaultEstimateHeuristic
C#
public void SetDefaultEstimateHeuristic(AStarGrid2D.Heuristic heuristic);

Устанавливает DefaultEstimateHeuristic. Формула оценки оставшейся стоимости без _EstimateCost override; не фактическая плата за переход. Должна не завышать и быть согласована с перемещениями и весами. Manhattan подходит 4-направленной сетке; не выбирайте его автоматически для дешёвых диагоналей. Веса <1/custom costs могут потребовать собственного return 0. Меняется без Update.

Параметры
ИмяТипПо умолчанию
heuristicAStarGrid2D.Heuristic—
heuristic

Euclidean, Manhattan, Octile или Chebyshev; согласуйте с переходами и весами.

SetDiagonalModevoid
# SetDiagonalMode
C#
public void SetDiagonalMode(AStarGrid2D.DiagonalModeEnum mode);

Устанавливает DiagonalMode. Правило диагоналей, меняется без Update: Always разрешает срезать угол даже между двумя solid-соседями; Never оставляет 4 направления; AtLeastOneWalkable требует хотя бы одну свободную боковую клетку; OnlyIfNoObstacles — обе. Диагональная целевая клетка всегда должна быть свободна. Это клеточное правило, не проверка радиуса персонажа.

Параметры
ИмяТипПо умолчанию
modeAStarGrid2D.DiagonalModeEnum—
mode

Одно из четырёх правил диагоналей; Max не является режимом.

SetJumpingEnabledvoid
# SetJumpingEnabled
C#
public void SetJumpingEnabled(bool enabled);

Устанавливает JumpingEnabled. Включает Jump Point Search без перестройки. В 1.0.0 эта ветка игнорирует weight_scale: дорогие клетки могут перестать обходиться. Результат может содержать только jump-точки без промежуточных соседних клеток; не считайте соседние элементы массива обязательно смежными. Используйте для подходящей однородной сетки; ускорение не гарантировано для любого случая.

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

Включает jumping-ветку; не включает препятствия или перестройку.

SetOffsetvoid
# SetOffset
C#
public void SetOffset(Vector2 offset);

Устанавливает Offset. Смещение выдаваемых Vector2-позиций, а не ID клеток или границ Region. Изменение помечает dirty. После Update позиции пересчитаются, solid/веса будут сброшены. Приблизительно равное значение может не пометить dirty.

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

Конечное смещение рассчитанных позиций, не ID клеток.

SetPointSolidvoid
# SetPointSolid
C#
public void SetPointSolid(Vector2I id, bool solid = true);

В готовой сетке помечает существующую клетку solid=true по умолчанию; false открывает её. ID должен быть в Region. Не помечает dirty и не требует Update. Solid start не даёт пути, solid goal допускает только partial. Dirty-перестройка позже сотрёт этот флаг.

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

ID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.

solid

true ставит препятствие, false снимает; по умолчанию true.

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

Задаёт конечный неотрицательный множитель стоимости входа в готовую клетку; не требует Update. Начальная клетка не получает плату входа. Не блокирует клетку: для запрета нужен solid. При JumpingEnabled вес хранится, но поиск его игнорирует. Проверяйте NaN/Infinity самостоятельно.

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

ID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.

weightScale

Конечный множитель входа ≥0; JumpingEnabled его игнорирует.

SetRegionvoid
# SetRegion
C#
public void SetRegion(Rect2I region);

Устанавливает Region. Прямоугольник целочисленных ID клеток: начало включено, конец исключён; начало может быть отрицательным. Размеры должны быть ≥0. Изменение помечает сетку dirty; перед доступом к клеткам/путям нужен Update. Перестройка сбросит solid и weight_scale: применяйте их после Update.

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

Прямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.

SetSizevoid
# SetSize
C#
public void SetSize(Vector2I size);

Устаревший путь изменения размера Region: нативный setter выдаёт предупреждение. Сам C# метод не помечен Obsolete в SDK, в отличие от свойства Size. Используйте Region; начало Region сохраняется, изменённый размер требует Update.

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

Новый неотрицательный размер Region; предпочтительнее задать Region целиком.

Updatevoid
# Update
C#
public void Update();

Если dirty=false, ничего не делает. Иначе заново создаёт клетки Region, позиции и границы, помечает clean; ВСЕ solid-флаги сбрасываются в false, веса — в 1. Сначала геометрия → Update → препятствия/веса → путь. После SetPointSolid/SetPointWeightScale Update не требуется.

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

Переопределяет базовую стоимость перехода между ID. В обычном поиске результат ещё умножается на вес назначения, в jumping веса игнорируются и callback может получить несмежные jump-точки. Без override используется DefaultComputeHeuristic по ID. C# base._ComputeCost возвращает default(float), не нативную формулу. Возвращайте конечную неотрицательную стоимость.

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

ID начала пути/перехода в Region; для поиска клетка должна быть свободной.

toId

ID цели/назначения в Region; partial не разрешает выйти за Region.

Возвращает float

Конечная неотрицательная базовая стоимость перехода.

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

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

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

ID начала пути/перехода в Region; для поиска клетка должна быть свободной.

endId

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

Возвращает float

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

AStarGrid2D.CellShapeEnum

ЗначениеОписание
IsometricDown = 2

Форма ячейки ромба (для изометрического вида). Координаты ячейки, где горизонтальная ось идет вниз-вправо, а вертикальная — вниз-влево.

IsometricRight = 1

Форма ячейки ромба (для изометрического вида). Координаты ячейки, где горизонтальная ось идет вверх-вправо, а вертикальная — вниз-вправо.

Max = 3

Представляет размер перечисления AStarGrid2D.CellShapeEnum.

Square = 0

Прямоугольная форма ячеек.

AStarGrid2D.DiagonalModeEnum

ЗначениеОписание
Always = 0

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

AtLeastOneWalkable = 2

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

Max = 4

Представляет размер перечисления AStarGrid2D.DiagonalModeEnum.

Never = 1

Алгоритм поиска пути будет игнорировать все диагонали, и путь всегда будет ортогональным.

OnlyIfNoObstacles = 3

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

AStarGrid2D.Heuristic

ЗначениеОписание
Chebyshev = 3

Шевьевская эвристика для использования при поиске пути с использованием следующей формулы:

Текст
dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
result = max(dx, dy)
Euclidean = 0

Евклидова эвристика (Эвклидовая эвристика) , используемая для поиска пути, по следующей формуле:

Текст
dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
result = sqrt(dx * dx + dy * dy)

Примечание: Это также внутренняя эвристика, используемая в AStar3D и AStar2D по умолчанию (с включением возможной координаты оси z).

Manhattan = 1

Манхэттенская эвристика для использования при поиске пути с использованием следующей формулы:

Текст
dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
result = dx + dy

Примечание: Этот эвристический метод предназначен для использования с 4-бокими ортогональными движениями, которые обеспечиваются путем установки AStarGrid2D.DiagonalMode в адрес AStarGrid2D.DiagonalModeEnum.Never.

Max = 4

Представляет размер перечисления AStarGrid2D.Heuristic.

Octile = 2

Эвристика Octile, используемая для поиска пути, использует следующую формулу:

Текст
dx = abs(to_id.x - from_id.x)
dy = abs(to_id.y - from_id.y)
f = sqrt(2) - 1
result = (dx < dy) ? f * dx + dy : f * dy + dx;
Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

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

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

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