Curve2D
Кубические сегменты Безье и кэш расстояния 2D-пути.
Точки AddPoint имеют относительные ручки @in/@out. Sample(idx,t) использует параметр сегмента; SampleBaked(offset) — расстояние по приближённому запечённому пути. Равные шаги t не означают постоянную скорость.
BakeInterval управляет плотностью кэша, а не исходными ручками. Для циклического маршрута согласуйте позиции концов и касательные. Путь не создаёт физического перемещения и не проверяет препятствия.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
Curve2DКонструктор
public Curve2D();Создаёт собственный пустой ресурс 2D-кривой, BakeInterval=5. Добавьте управляющие точки до выборки позиций. Кривая хранит локальные данные, не является автоматически движущейся Entity и не создаёт коллизии. Dispose ресурс после использования.
Свойства3
BakeIntervalСвойство
public float BakeInterval { get; set; }Положительный конечный масштаб плотности CPU-кеша в локальных единицах, default 5. Меньше обычно даёт больше сэмплов и затрат памяти/CPU; это не точная аналитическая длина и не обещание одинакового шага. Подразделение ограничено глубиной. Setter сам не ограничивает положительность/конечность и помечает кеш dirty даже при том же значении.
PointCountСвойство
public int PointCount { get; set; }Количество управляющих точек, не baked-сэмплов. Рост добавляет нулевые позиции/handles и может испускать Changed для каждой точки; уменьшение отбрасывает конец. Это не атомарное назначение новой кривой. Для смены готового пути сначала подготовьте отдельный ресурс, затем назначьте Path2D.Curve.
_DataСвойство
public Reckfell.Collections.Dictionary _Data { get; set; }Внутренний Dictionary-снимок с points:Vector2[] тройками in/out/position. Setter требует длину, кратную 3; корректный roundtrip копирует управляющие данные, не общую геометрию двух Curve2D. Это не полный внешний формат ресурса и не контейнер для непроверенного ввода. Для обычной работы используйте методы точек; собственный Dictionary wrapper Dispose после чтения.
Методы23
AddPointvoid
public void AddPoint(Vector2 position, Vector2? @in = default, Vector2? @out = default, int index = -1);Добавляет позицию и относительные ручки @in/@out. Абсолютная контрольная точка сегмента получается прибавлением ручки к позиции соответствующего конца.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector2 | — |
in | Vector2? | default |
out | Vector2? | default |
index | int | -1 |
positionКонечная локальная позиция; SetPointIn/Out принимают относительный handle.
inОтносительный входящий handle; null/default даёт Vector2.Zero.
outОтносительный исходящий handle; null/default даёт Vector2.Zero.
indexИндекс вставки перед точкой; отрицательный/вне диапазона добавляет в конец.
ClearPointsvoid
public void ClearPoints();Удаляет управляющие точки; baked-данные очищаются при следующем запросе. Сохраняет BakeInterval. GetBakedLength пустой кривой даёт 0, GetBakedPoints — пустой массив; Sample и выборку ориентации до добавления точек не вызывайте.
GetBakeIntervalfloat
public float GetBakeInterval();Читает BakeInterval. Положительный конечный масштаб плотности CPU-кеша в локальных единицах, default 5. Меньше обычно даёт больше сэмплов и затрат памяти/CPU; это не точная аналитическая длина и не обещание одинакового шага. Подразделение ограничено глубиной. Setter сам не ограничивает положительность/конечность и помечает кеш dirty даже при том же значении.
floatСохранённый масштаб плотности кеша, default 5 локальных единиц.
GetBakedLengthfloat
public float GetBakedLength();Лениво пересчитывает dirty-кеш и возвращает приближённую длину его полилинии в локальных единицах. Для пустой/одноточечной кривой 0. Масштаб/поворот Path2D не включаются автоматически; это не world-длина.
floatПриближённая локальная длина baked-полилинии; 0 для пустой/одноточечной кривой.
GetBakedPointsVector2[]
public Vector2[] GetBakedPoints();Возвращает независимый C# массив локальных baked-позиций, обновляя кеш при необходимости. Индексы массива не являются индексами управляющих точек. Изменение массива не меняет Curve2D.
Vector2[]Новый независимый C# массив локальных позиций аппроксимации.
GetClosestOffsetfloat
public float GetClosestOffset(Vector2 toPoint);Возвращает локальное расстояние вдоль baked-пути до ближайшей проекции toPoint, а не поперечное расстояние до кривой и не t. Для одной точки 0; для большого кеша учитывайте полный перебор сегментов.
| Имя | Тип | По умолчанию |
|---|---|---|
toPoint | Vector2 | — |
toPointКонечная точка в той же локальной системе, что позиции Curve2D.
floatЛокальное расстояние вдоль пути до ближайшей проекции.
GetClosestPointVector2
public Vector2 GetClosestPoint(Vector2 toPoint);Ищет ближайшую локальную проекцию на сегменты baked-полилинии перебором. Это аппроксимация, не точное решение по исходному Bezier и не физический raycast. Для world-точки сначала Path2D.ToLocal, после запроса при необходимости ToGlobal. Вырожденные сегменты отдельно не проверены.
| Имя | Тип | По умолчанию |
|---|---|---|
toPoint | Vector2 | — |
toPointКонечная точка в той же локальной системе, что позиции Curve2D.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
GetPointCountint
public int GetPointCount();Читает количество управляющих точек, не число сегментов или baked-позиций. Для N точек обычная Curve2D содержит N−1 сегментов при N≥2.
intКоличество управляющих точек, не baked-сэмплов.
GetPointInVector2
public Vector2 GetPointIn(int idx);Читает относительный входящий handle. Абсолютная Bezier-контрольная позиция — GetPointPosition(idx)+GetPointIn(idx). У первой точки открытого пути этот handle не задаёт предыдущий сегмент.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
GetPointOutVector2
public Vector2 GetPointOut(int idx);Читает относительный исходящий handle. У последней точки он не создаёт дополнительный сегмент; для петли нужно явно согласовать геометрию концов.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
GetPointPositionVector2
public Vector2 GetPointPosition(int idx);Читает локальную позицию существующей управляющей точки; не world-позицию и не baked sample. Для world-координат используйте transform соответствующего Path2D.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
RemovePointvoid
public void RemovePoint(int idx);Удаляет существующий индекс, сдвигает последующие и инвалидирует кеш. Не соединяет автоматически геометрию в замкнутую петлю.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
SampleVector2
public Vector2 Sample(int idx, float t);Выбирает точку по параметру t сегмента idx. Равные шаги t не означают равное расстояние вдоль кривой.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
t | float | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
tКонечный параметр сегмента, обычно 0..1; не расстояние и не elapsed seconds. Не рассчитывайте на автоматическое ограничение t.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
SampleBakedVector2
public Vector2 SampleBaked(float offset = 0f, bool cubic = false);Выбирает точку по расстоянию offset в запечённом кэше. Это приближённая длина; согласуйте cubic с настройкой PathFollow2D при сравнении.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | float | 0f |
cubic | bool | false |
offsetКонечное локальное расстояние по baked-кешу; ограничивается 0..GetBakedLength().
cubictrue интерполирует кеш кубически, default false — линейно. На редком кеше позиции могут отличаться даже для прямого пути.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
SampleBakedWithRotationTransform2D
public Transform2D SampleBakedWithRotation(float offset = 0f, bool cubic = false);Возвращает локальный Transform2D: Origin — выбранная baked-позиция, ось +X — касательная, +Y — перпендикуляр. offset — конечное расстояние с ограничением 0..length; cubic меняет интерполяцию позиций. Для ориентации нужны минимум две невырожденные точки: одна даёт диагностику. Не включает transform Path2D и не присваивает положение Entity автоматически.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | float | 0f |
cubic | bool | false |
offsetКонечное локальное расстояние по baked-кешу; ограничивается 0..GetBakedLength().
cubictrue интерполирует кеш кубически, default false — линейно. На редком кеше позиции могут отличаться даже для прямого пути.
Transform2DЛокальный Transform2D с +X по касательной; не world transform.
SamplefVector2
public Vector2 Samplef(float fofs);Целая часть fofs — индекс сегмента, дробная — t. Не нормализованная доля всей кривой и не число локальных единиц. За пределами диапазона возвращает крайние точки, не делает looping. Используйте корректные сегменты 0..PointCount−2 для обычной выборки.
| Имя | Тип | По умолчанию |
|---|---|---|
fofs | float | — |
fofsИндекс сегмента плюс дробный t; не normalized ratio всей кривой.
Vector2Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.
SetBakeIntervalvoid
public void SetBakeInterval(float distance);Устанавливает BakeInterval. Положительный конечный масштаб плотности CPU-кеша в локальных единицах, default 5. Меньше обычно даёт больше сэмплов и затрат памяти/CPU; это не точная аналитическая длина и не обещание одинакового шага. Подразделение ограничено глубиной. Setter сам не ограничивает положительность/конечность и помечает кеш dirty даже при том же значении.
| Имя | Тип | По умолчанию |
|---|---|---|
distance | float | — |
distanceПоложительный конечный BakeInterval в локальных единицах; валидируйте в вызывающем коде.
SetPointCountvoid
public void SetPointCount(int count);Устанавливает PointCount. Количество управляющих точек, не baked-сэмплов. Рост добавляет нулевые позиции/handles и может испускать Changed для каждой точки; уменьшение отбрасывает конец. Это не атомарное назначение новой кривой. Для смены готового пути сначала подготовьте отдельный ресурс, затем назначьте Path2D.Curve.
| Имя | Тип | По умолчанию |
|---|---|---|
count | int | — |
countНеотрицательное количество управляющих точек; рост добавляет нулевые данные.
SetPointInvoid
public void SetPointIn(int idx, Vector2 position);Задаёт относительный входящий handle существующей точки и инвалидирует кеш. Это не world-позиция и не координата соседней точки.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
position | Vector2 | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
positionКонечная локальная позиция; SetPointIn/Out принимают относительный handle.
SetPointOutvoid
public void SetPointOut(int idx, Vector2 position);Задаёт относительный исходящий handle существующей точки и инвалидирует кеш. Абсолютная контрольная позиция получается добавлением к позиции этой точки.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
position | Vector2 | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
positionКонечная локальная позиция; SetPointIn/Out принимают относительный handle.
SetPointPositionvoid
public void SetPointPosition(int idx, Vector2 position);Меняет локальную позицию существующей точки, сохраняя её относительные handles. Инвалидирует кеш и испускает Changed; общий ресурс изменится для всех владельцев.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
position | Vector2 | — |
idxСуществующий индекс управляющей точки; у Sample — индекс сегмента.
positionКонечная локальная позиция; SetPointIn/Out принимают относительный handle.
TessellateVector2[]
public Vector2[] Tessellate(int maxStages = 5, float toleranceDegrees = 4f);Возвращает локальную полилинию адаптивного подразделения по угловому критерию toleranceDegrees. maxStages ограничивает глубину, не количество точек. Не меняет управляющие данные и не обещает одинаковые расстояния или точную длину.
| Имя | Тип | По умолчанию |
|---|---|---|
maxStages | int | 5 |
toleranceDegrees | float | 4f |
maxStagesРазумная неотрицательная глубина подразделения; не число выходных точек.
toleranceDegreesПоложительный конечный угловой критерий в градусах, ограниченный maxStages.
Vector2[]Новый независимый C# массив локальных позиций аппроксимации.
TessellateEvenLengthVector2[]
public Vector2[] TessellateEvenLength(int maxStages = 5, float toleranceLength = 20f);Возвращает локальную полилинию по критерию длины toleranceLength, публичный default SDK 1.0.0 — 20 локальных единиц. Не путайте с default 0.2 у Curve3D. maxStages ограничивает глубину: строго одинаковый шаг или достижение допуска не гарантируются. Требуется минимум две точки.
| Имя | Тип | По умолчанию |
|---|---|---|
maxStages | int | 5 |
toleranceLength | float | 20f |
maxStagesРазумная неотрицательная глубина подразделения; не число выходных точек.
toleranceLengthПоложительный конечный критерий длины в локальных единицах; публичный default 20.
Vector2[]Новый независимый C# массив локальных позиций аппроксимации.