AStarGrid2D
Поиск пути по прямоугольной сетке с препятствиями, диагоналями и весами клеток.
Порядок работы: задайте 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Конструктор
public AStarGrid2D();Создаёт пустую сетку. Задайте Region, CellSize/Offset/CellShape, вызовите Update, затем примените препятствия и веса. Соединения соседних клеток создаются алгоритмом, ConnectPoints не нужен. Собственный RefCounted-экземпляр освобождайте через Dispose.
Свойства9
CellShapeСвойство
public AStarGrid2D.CellShapeEnum CellShape { get; set; }Выбирает Square, IsometricRight или IsometricDown для преобразования ID в позиции. Изменение требует Update. Изометрическое отображение не строит коллизии и не меняет ID или правило соседства DiagonalMode. Значение Max — граница enum, не форма.
CellSizeСвойство
public Vector2 CellSize { get; set; }Масштаб геометрического отображения ID в Vector2. Для Square позиция = Offset + Vector2(id) * CellSize; ID не отсчитывается от начала Region. Изменение требует Update со сбросом cell overrides. Стандартные стоимости используют ID, поэтому этот масштаб не задаёт стоимость пути в мировых единицах. Передавайте конечный осмысленный размер.
DefaultComputeHeuristicСвойство
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Свойство
public AStarGrid2D.Heuristic DefaultEstimateHeuristic { get; set; }Формула оценки оставшейся стоимости без _EstimateCost override; не фактическая плата за переход. Должна не завышать и быть согласована с перемещениями и весами. Manhattan подходит 4-направленной сетке; не выбирайте его автоматически для дешёвых диагоналей. Веса <1/custom costs могут потребовать собственного return 0. Меняется без Update.
DiagonalModeСвойство
public AStarGrid2D.DiagonalModeEnum DiagonalMode { get; set; }Правило диагоналей, меняется без Update: Always разрешает срезать угол даже между двумя solid-соседями; Never оставляет 4 направления; AtLeastOneWalkable требует хотя бы одну свободную боковую клетку; OnlyIfNoObstacles — обе. Диагональная целевая клетка всегда должна быть свободна. Это клеточное правило, не проверка радиуса персонажа.
JumpingEnabledСвойство
public bool JumpingEnabled { get; set; }Включает Jump Point Search без перестройки. В 1.0.0 эта ветка игнорирует weight_scale: дорогие клетки могут перестать обходиться. Результат может содержать только jump-точки без промежуточных соседних клеток; не считайте соседние элементы массива обязательно смежными. Используйте для подходящей однородной сетки; ускорение не гарантировано для любого случая.
OffsetСвойство
public Vector2 Offset { get; set; }Смещение выдаваемых Vector2-позиций, а не ID клеток или границ Region. Изменение помечает dirty. После Update позиции пересчитаются, solid/веса будут сброшены. Приблизительно равное значение может не пометить dirty.
RegionСвойство
public Rect2I Region { get; set; }Прямоугольник целочисленных ID клеток: начало включено, конец исключён; начало может быть отрицательным. Размеры должны быть ≥0. Изменение помечает сетку dirty; перед доступом к клеткам/путям нужен Update. Перестройка сбросит solid и weight_scale: применяйте их после Update.
SizeСвойство · Устарело
public Vector2I Size { get; set; }Устаревшее C# свойство размера Region без управления его началом; используйте Region. Это не размер пикселя клетки. Запись изменённого размера требует Update и теряет cell overrides при перестройке.
Методы37
Clearvoid
public void Clear();Очищает точки и делает Region пустым; не возвращает все настройки к defaults. Offset, CellSize и политики поиска сохраняются. Для новой карты задайте новый непустой Region, вызовите Update и снова нанесите препятствия/веса. Не используйте Clear как сброс только препятствий.
FillSolidRegionvoid
public void FillSolidRegion(Rect2I region, bool solid = true);В готовой сетке ставит solid для пересечения переданного прямоугольника с Region; конец исключён. Клетки вне пересечения не меняются. Не требует Update; последующая dirty-перестройка сбросит значения. Пустое пересечение ничего не меняет.
| Имя | Тип | По умолчанию |
|---|---|---|
region | Rect2I | — |
solid | bool | true |
regionПрямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.
solidtrue ставит препятствие, false снимает; по умолчанию true.
FillWeightScaleRegionvoid
public void FillWeightScaleRegion(Rect2I region, float weightScale);Задаёт одинаковый конечный вес ≥0 клеткам пересечения с Region; не помечает dirty. Это не добавление к старому весу. В jumping-режиме веса игнорируются, при dirty Update сбрасываются в 1.
| Имя | Тип | По умолчанию |
|---|---|---|
region | Rect2I | — |
weightScale | float | — |
regionПрямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.
weightScaleКонечный множитель входа ≥0; JumpingEnabled его игнорирует.
GetCellShapeAStarGrid2D.CellShapeEnum
public AStarGrid2D.CellShapeEnum GetCellShape();Читает текущее CellShape; ничего не перестраивает. Выбирает Square, IsometricRight или IsometricDown для преобразования ID в позиции. Изменение требует Update. Изометрическое отображение не строит коллизии и не меняет ID или правило соседства DiagonalMode. Значение Max — граница enum, не форма.
AStarGrid2D.CellShapeEnumТекущее значение CellShape; см. единицы и ограничения в описании.
GetCellSizeVector2
public Vector2 GetCellSize();Читает текущее CellSize; ничего не перестраивает. Масштаб геометрического отображения ID в Vector2. Для Square позиция = Offset + Vector2(id) * CellSize; ID не отсчитывается от начала Region. Изменение требует Update со сбросом cell overrides. Стандартные стоимости используют ID, поэтому этот масштаб не задаёт стоимость пути в мировых единицах. Передавайте конечный осмысленный размер.
Vector2Текущее значение CellSize; см. единицы и ограничения в описании.
GetDefaultComputeHeuristicAStarGrid2D.Heuristic
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
public AStarGrid2D.Heuristic GetDefaultEstimateHeuristic();Читает текущее DefaultEstimateHeuristic; ничего не перестраивает. Формула оценки оставшейся стоимости без _EstimateCost override; не фактическая плата за переход. Должна не завышать и быть согласована с перемещениями и весами. Manhattan подходит 4-направленной сетке; не выбирайте его автоматически для дешёвых диагоналей. Веса <1/custom costs могут потребовать собственного return 0. Меняется без Update.
AStarGrid2D.HeuristicТекущее значение DefaultEstimateHeuristic; см. единицы и ограничения в описании.
GetDiagonalModeAStarGrid2D.DiagonalModeEnum
public AStarGrid2D.DiagonalModeEnum GetDiagonalMode();Читает текущее DiagonalMode; ничего не перестраивает. Правило диагоналей, меняется без Update: Always разрешает срезать угол даже между двумя solid-соседями; Never оставляет 4 направления; AtLeastOneWalkable требует хотя бы одну свободную боковую клетку; OnlyIfNoObstacles — обе. Диагональная целевая клетка всегда должна быть свободна. Это клеточное правило, не проверка радиуса персонажа.
AStarGrid2D.DiagonalModeEnumТекущее значение DiagonalMode; см. единицы и ограничения в описании.
GetIdPath2 перегрузки
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 может опускать промежуточные клетки. Не запускайте параллельные поиски/изменения на одном экземпляре.
| Имя | Тип | По умолчанию |
|---|---|---|
fromId | Vector2I | — |
toId | Vector2I | — |
fromIdID начала пути/перехода в Region; для поиска клетка должна быть свободной.
toIdID цели/назначения в Region; partial не разрешает выйти за Region.
Reckfell.Collections.Array<Vector2I>Новый типизированный Array<Vector2I>; пустой без результата, partial может не достичь цели. Тип не имеет Dispose.
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 может опускать промежуточные клетки. Не запускайте параллельные поиски/изменения на одном экземпляре.
| Имя | Тип | По умолчанию |
|---|---|---|
fromId | Vector2I | — |
toId | Vector2I | — |
allowPartialPath | bool | false |
fromIdID начала пути/перехода в Region; для поиска клетка должна быть свободной.
toIdID цели/назначения в Region; partial не разрешает выйти за Region.
allowPartialPathtrue разрешает закончить на достигнутом кандидате, но не на solid start или вне Region.
Reckfell.Collections.Array<Vector2I>Новый типизированный Array<Vector2I>; пустой без результата, partial может не достичь цели. Тип не имеет Dispose.
GetOffsetVector2
public Vector2 GetOffset();Читает текущее Offset; ничего не перестраивает. Смещение выдаваемых Vector2-позиций, а не ID клеток или границ Region. Изменение помечает dirty. После Update позиции пересчитаются, solid/веса будут сброшены. Приблизительно равное значение может не пометить dirty.
Vector2Текущее значение Offset; см. единицы и ограничения в описании.
GetPointDataInRegionReckfell.Collections.Array<Reckfell.Collections.Dictionary>
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.
| Имя | Тип | По умолчанию |
|---|---|---|
region | Rect2I | — |
regionПрямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.
Reckfell.Collections.Array<Reckfell.Collections.Dictionary>Типизированный Array<Dictionary> снимков клеток пересечения; может быть пустым.
GetPointPath2 перегрузки
public Vector2[] GetPointPath(Vector2I fromId, Vector2I toId);Возвращает Vector2-позиции найденного пути; условия и partial-правила те же, что GetIdPath. Геометрия берётся из CellSize/Offset/CellShape, а не из Entity transforms. Это не сглаживание, физическая проходимость или управление персонажем. Jumping может пропускать промежуточные клетки; массив — независимый снимок.
| Имя | Тип | По умолчанию |
|---|---|---|
fromId | Vector2I | — |
toId | Vector2I | — |
fromIdID начала пути/перехода в Region; для поиска клетка должна быть свободной.
toIdID цели/назначения в Region; partial не разрешает выйти за Region.
Vector2[]Новый независимый Vector2[] позиций пути; может быть пустым или partial.
public Vector2[] GetPointPath(Vector2I fromId, Vector2I toId, bool allowPartialPath = false);Возвращает Vector2-позиции найденного пути; условия и partial-правила те же, что GetIdPath. Геометрия берётся из CellSize/Offset/CellShape, а не из Entity transforms. Это не сглаживание, физическая проходимость или управление персонажем. Jumping может пропускать промежуточные клетки; массив — независимый снимок.
| Имя | Тип | По умолчанию |
|---|---|---|
fromId | Vector2I | — |
toId | Vector2I | — |
allowPartialPath | bool | false |
fromIdID начала пути/перехода в Region; для поиска клетка должна быть свободной.
toIdID цели/назначения в Region; partial не разрешает выйти за Region.
allowPartialPathtrue разрешает закончить на достигнутом кандидате, но не на solid start или вне Region.
Vector2[]Новый независимый Vector2[] позиций пути; может быть пустым или partial.
GetPointPositionVector2
public Vector2 GetPointPosition(Vector2I id);Возвращает рассчитанную Vector2-позицию готовой клетки. Для Square это Offset + Vector2(id) * CellSize, без вычитания Region.Position; изометрические формы используют половину размера и преобразованные оси. Это не автоматическая world-позиция Entity.
| Имя | Тип | По умолчанию |
|---|---|---|
id | Vector2I | — |
idID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.
Vector2Рассчитанная Vector2; при dirty/неверном ID — диагностика и нулевой fallback.
GetPointWeightScalefloat
public float GetPointWeightScale(Vector2I id);Читает сохранённый вес готовой клетки. Значение не доказывает, что jumping-поиск его учитывает. Dirty/неверный ID даёт диагностику и нулевой fallback.
| Имя | Тип | По умолчанию |
|---|---|---|
id | Vector2I | — |
idID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.
floatСохранённый вес; нулевой fallback при ошибке не является корректным чтением.
GetRegionRect2I
public Rect2I GetRegion();Читает текущее Region; ничего не перестраивает. Прямоугольник целочисленных ID клеток: начало включено, конец исключён; начало может быть отрицательным. Размеры должны быть ≥0. Изменение помечает сетку dirty; перед доступом к клеткам/путям нужен Update. Перестройка сбросит solid и weight_scale: применяйте их после Update.
Rect2IТекущее значение Region; см. единицы и ограничения в описании.
GetSizeVector2I
public Vector2I GetSize();Читает только Region.Size. Метод SDK не помечен Obsolete, хотя свойство Size помечено; для нового кода читайте Region.Size. Не возвращает CellSize и не перестраивает сетку.
Vector2IТекущее значение Size; см. единицы и ограничения в описании.
IsDirtybool
public bool IsDirty();Сообщает, что геометрия изменена и нужен Update. false не означает непустую/проходимую сетку: новый экземпляр имеет пустой Region и dirty=false. IsInBounds проверяет Region, но не готовность клеточных данных.
booltrue при отложенной перестройке; false не доказывает непустую карту.
IsInBoundsbool
public bool IsInBounds(int x, int y);Проверяет x/y по текущему Region с исключённой конечной границей. Не проверяет solid, достижимость, dirty или наличие уже перестроенных данных.
| Имя | Тип | По умолчанию |
|---|---|---|
x | int | — |
y | int | — |
xЦелочисленная X-координата ID, не мировая позиция.
yЦелочисленная Y-координата ID, не мировая позиция.
boolПопадание ID в Region независимо от dirty/solid.
IsInBoundsvbool
public bool IsInBoundsv(Vector2I id);Та же проверка Region, что IsInBounds, с ID Vector2I. Попадание в Region не разрешает обращаться к dirty-сетке до Update.
| Имя | Тип | По умолчанию |
|---|---|---|
id | Vector2I | — |
idID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.
boolПопадание ID в Region независимо от dirty/solid.
IsJumpingEnabledbool
public bool IsJumpingEnabled();Читает текущее JumpingEnabled; ничего не перестраивает. Включает Jump Point Search без перестройки. В 1.0.0 эта ветка игнорирует weight_scale: дорогие клетки могут перестать обходиться. Результат может содержать только jump-точки без промежуточных соседних клеток; не считайте соседние элементы массива обязательно смежными. Используйте для подходящей однородной сетки; ускорение не гарантировано для любого случая.
boolТекущее значение JumpingEnabled; см. единицы и ограничения в описании.
IsPointSolidbool
public bool IsPointSolid(Vector2I id);Читает препятствие готовой клетки в Region. При dirty или неверном ID нативный fallback false сопровождается ошибкой: это не доказательство проходимости. Проверяйте IsDirty и IsInBoundsv до вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
id | Vector2I | — |
idID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.
boolSolid-флаг; diagnosed false при ошибке не означает свободную клетку.
SetCellShapevoid
public void SetCellShape(AStarGrid2D.CellShapeEnum cellShape);Устанавливает CellShape. Выбирает Square, IsometricRight или IsometricDown для преобразования ID в позиции. Изменение требует Update. Изометрическое отображение не строит коллизии и не меняет ID или правило соседства DiagonalMode. Значение Max — граница enum, не форма.
| Имя | Тип | По умолчанию |
|---|---|---|
cellShape | AStarGrid2D.CellShapeEnum | — |
cellShapeSquare, IsometricRight или IsometricDown; не Max.
SetCellSizevoid
public void SetCellSize(Vector2 cellSize);Устанавливает CellSize. Масштаб геометрического отображения ID в Vector2. Для Square позиция = Offset + Vector2(id) * CellSize; ID не отсчитывается от начала Region. Изменение требует Update со сбросом cell overrides. Стандартные стоимости используют ID, поэтому этот масштаб не задаёт стоимость пути в мировых единицах. Передавайте конечный осмысленный размер.
| Имя | Тип | По умолчанию |
|---|---|---|
cellSize | Vector2 | — |
cellSizeКонечный масштаб геометрии клеток; default-стоимости работают по ID.
SetDefaultComputeHeuristicvoid
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.
| Имя | Тип | По умолчанию |
|---|---|---|
heuristic | AStarGrid2D.Heuristic | — |
heuristicEuclidean, Manhattan, Octile или Chebyshev; согласуйте с переходами и весами.
SetDefaultEstimateHeuristicvoid
public void SetDefaultEstimateHeuristic(AStarGrid2D.Heuristic heuristic);Устанавливает DefaultEstimateHeuristic. Формула оценки оставшейся стоимости без _EstimateCost override; не фактическая плата за переход. Должна не завышать и быть согласована с перемещениями и весами. Manhattan подходит 4-направленной сетке; не выбирайте его автоматически для дешёвых диагоналей. Веса <1/custom costs могут потребовать собственного return 0. Меняется без Update.
| Имя | Тип | По умолчанию |
|---|---|---|
heuristic | AStarGrid2D.Heuristic | — |
heuristicEuclidean, Manhattan, Octile или Chebyshev; согласуйте с переходами и весами.
SetDiagonalModevoid
public void SetDiagonalMode(AStarGrid2D.DiagonalModeEnum mode);Устанавливает DiagonalMode. Правило диагоналей, меняется без Update: Always разрешает срезать угол даже между двумя solid-соседями; Never оставляет 4 направления; AtLeastOneWalkable требует хотя бы одну свободную боковую клетку; OnlyIfNoObstacles — обе. Диагональная целевая клетка всегда должна быть свободна. Это клеточное правило, не проверка радиуса персонажа.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | AStarGrid2D.DiagonalModeEnum | — |
modeОдно из четырёх правил диагоналей; Max не является режимом.
SetJumpingEnabledvoid
public void SetJumpingEnabled(bool enabled);Устанавливает JumpingEnabled. Включает Jump Point Search без перестройки. В 1.0.0 эта ветка игнорирует weight_scale: дорогие клетки могут перестать обходиться. Результат может содержать только jump-точки без промежуточных соседних клеток; не считайте соседние элементы массива обязательно смежными. Используйте для подходящей однородной сетки; ускорение не гарантировано для любого случая.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledВключает jumping-ветку; не включает препятствия или перестройку.
SetOffsetvoid
public void SetOffset(Vector2 offset);Устанавливает Offset. Смещение выдаваемых Vector2-позиций, а не ID клеток или границ Region. Изменение помечает dirty. После Update позиции пересчитаются, solid/веса будут сброшены. Приблизительно равное значение может не пометить dirty.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | Vector2 | — |
offsetКонечное смещение рассчитанных позиций, не ID клеток.
SetPointSolidvoid
public void SetPointSolid(Vector2I id, bool solid = true);В готовой сетке помечает существующую клетку solid=true по умолчанию; false открывает её. ID должен быть в Region. Не помечает dirty и не требует Update. Solid start не даёт пути, solid goal допускает только partial. Dirty-перестройка позже сотрёт этот флаг.
| Имя | Тип | По умолчанию |
|---|---|---|
id | Vector2I | — |
solid | bool | true |
idID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.
solidtrue ставит препятствие, false снимает; по умолчанию true.
SetPointWeightScalevoid
public void SetPointWeightScale(Vector2I id, float weightScale);Задаёт конечный неотрицательный множитель стоимости входа в готовую клетку; не требует Update. Начальная клетка не получает плату входа. Не блокирует клетку: для запрета нужен solid. При JumpingEnabled вес хранится, но поиск его игнорирует. Проверяйте NaN/Infinity самостоятельно.
| Имя | Тип | По умолчанию |
|---|---|---|
id | Vector2I | — |
weightScale | float | — |
idID клетки внутри Region; для чтения/изменения клеток нужен dirty=false.
weightScaleКонечный множитель входа ≥0; JumpingEnabled его игнорирует.
SetRegionvoid
public void SetRegion(Rect2I region);Устанавливает Region. Прямоугольник целочисленных ID клеток: начало включено, конец исключён; начало может быть отрицательным. Размеры должны быть ≥0. Изменение помечает сетку dirty; перед доступом к клеткам/путям нужен Update. Перестройка сбросит solid и weight_scale: применяйте их после Update.
| Имя | Тип | По умолчанию |
|---|---|---|
region | Rect2I | — |
regionПрямоугольник ID с неотрицательными размерами; для fill/query используется пересечение с Region.
SetSizevoid
public void SetSize(Vector2I size);Устаревший путь изменения размера Region: нативный setter выдаёт предупреждение. Сам C# метод не помечен Obsolete в SDK, в отличие от свойства Size. Используйте Region; начало Region сохраняется, изменённый размер требует Update.
| Имя | Тип | По умолчанию |
|---|---|---|
size | Vector2I | — |
sizeНовый неотрицательный размер Region; предпочтительнее задать Region целиком.
Updatevoid
public void Update();Если dirty=false, ничего не делает. Иначе заново создаёт клетки Region, позиции и границы, помечает clean; ВСЕ solid-флаги сбрасываются в false, веса — в 1. Сначала геометрия → Update → препятствия/веса → путь. После SetPointSolid/SetPointWeightScale Update не требуется.
_ComputeCostfloat
public virtual float _ComputeCost(Vector2I fromId, Vector2I toId);Переопределяет базовую стоимость перехода между ID. В обычном поиске результат ещё умножается на вес назначения, в jumping веса игнорируются и callback может получить несмежные jump-точки. Без override используется DefaultComputeHeuristic по ID. C# base._ComputeCost возвращает default(float), не нативную формулу. Возвращайте конечную неотрицательную стоимость.
| Имя | Тип | По умолчанию |
|---|---|---|
fromId | Vector2I | — |
toId | Vector2I | — |
fromIdID начала пути/перехода в Region; для поиска клетка должна быть свободной.
toIdID цели/назначения в Region; partial не разрешает выйти за Region.
floatКонечная неотрицательная базовая стоимость перехода.
_EstimateCostfloat
public virtual float _EstimateCost(Vector2I fromId, Vector2I endId);Переопределяет оценку оставшейся стоимости. Для оптимальности нужна допустимая согласованная эвристика; закрытые клетки не переоткрываются. При произвольных неотрицательных стоимостях return 0 — безопасная исходная оценка обычного поиска. Без override действует DefaultEstimateHeuristic; C# base-вызов возвращает default(float). Произвольные custom costs с Jumping требуют отдельной проверки.
| Имя | Тип | По умолчанию |
|---|---|---|
fromId | Vector2I | — |
endId | Vector2I | — |
fromIdID начала пути/перехода в Region; для поиска клетка должна быть свободной.
endIdID цели, до которой оценивается оставшаяся стоимость.
floatКонечная согласованная нижняя оценка оставшейся стоимости.
AStarGrid2D.CellShapeEnum
| Значение | Описание |
|---|---|
IsometricDown = 2 | Форма ячейки ромба (для изометрического вида). Координаты ячейки, где горизонтальная ось идет вниз-вправо, а вертикальная — вниз-влево. |
IsometricRight = 1 | Форма ячейки ромба (для изометрического вида). Координаты ячейки, где горизонтальная ось идет вверх-вправо, а вертикальная — вниз-вправо. |
Max = 3 | Представляет размер перечисления |
Square = 0 | Прямоугольная форма ячеек. |
AStarGrid2D.DiagonalModeEnum
| Значение | Описание |
|---|---|
Always = 0 | Алгоритм поиска пути будет игнорировать сплошных соседей вокруг целевой ячейки и разрешать проход по диагоналям. |
AtLeastOneWalkable = 2 | Алгоритм поиска пути избегает использования диагоналей, если вокруг соседних ячеек определенного сегмента пути размещено не менее двух препятствий. |
Max = 4 | Представляет размер перечисления |
Never = 1 | Алгоритм поиска пути будет игнорировать все диагонали, и путь всегда будет ортогональным. |
OnlyIfNoObstacles = 3 | Алгоритм поиска пути избегает использования диагоналей, если вокруг соседних ячеек определенного сегмента пути размещено какое-либо препятствие. |
AStarGrid2D.Heuristic
| Значение | Описание |
|---|---|
Chebyshev = 3 | Шевьевская эвристика для использования при поиске пути с использованием следующей формулы: |
Euclidean = 0 | Евклидова эвристика (Эвклидовая эвристика) , используемая для поиска пути, по следующей формуле: Примечание: Это также внутренняя эвристика, используемая в |
Manhattan = 1 | Манхэттенская эвристика для использования при поиске пути с использованием следующей формулы: Примечание: Этот эвристический метод предназначен для использования с 4-бокими ортогональными движениями, которые обеспечиваются путем установки |
Max = 4 | Представляет размер перечисления |
Octile = 2 | Эвристика Octile, используемая для поиска пути, использует следующую формулу: |