reckfellENGINE

Curve2D

Кубические сегменты Безье и кэш расстояния 2D-пути.

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

Точки AddPoint имеют относительные ручки @in/@out. Sample(idx,t) использует параметр сегмента; SampleBaked(offset) — расстояние по приближённому запечённому пути. Равные шаги t не означают постоянную скорость.

BakeInterval управляет плотностью кэша, а не исходными ручками. Для циклического маршрута согласуйте позиции концов и касательные. Путь не создаёт физического перемещения и не проверяет препятствия.

Практическое руководство.

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

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

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

Создаёт собственный пустой ресурс 2D-кривой, BakeInterval=5. Добавьте управляющие точки до выборки позиций. Кривая хранит локальные данные, не является автоматически движущейся Entity и не создаёт коллизии. Dispose ресурс после использования.

Свойства3

BakeIntervalСвойство
# BakeInterval
C#
public float BakeInterval { get; set; }

Положительный конечный масштаб плотности CPU-кеша в локальных единицах, default 5. Меньше обычно даёт больше сэмплов и затрат памяти/CPU; это не точная аналитическая длина и не обещание одинакового шага. Подразделение ограничено глубиной. Setter сам не ограничивает положительность/конечность и помечает кеш dirty даже при том же значении.

PointCountСвойство
# PointCount
C#
public int PointCount { get; set; }

Количество управляющих точек, не baked-сэмплов. Рост добавляет нулевые позиции/handles и может испускать Changed для каждой точки; уменьшение отбрасывает конец. Это не атомарное назначение новой кривой. Для смены готового пути сначала подготовьте отдельный ресурс, затем назначьте Path2D.Curve.

_DataСвойство
# _Data
C#
public Reckfell.Collections.Dictionary _Data { get; set; }

Внутренний Dictionary-снимок с points:Vector2[] тройками in/out/position. Setter требует длину, кратную 3; корректный roundtrip копирует управляющие данные, не общую геометрию двух Curve2D. Это не полный внешний формат ресурса и не контейнер для непроверенного ввода. Для обычной работы используйте методы точек; собственный Dictionary wrapper Dispose после чтения.

Методы23

AddPointvoid
# AddPoint
C#
public void AddPoint(Vector2 position, Vector2? @in = default, Vector2? @out = default, int index = -1);

Добавляет позицию и относительные ручки @in/@out. Абсолютная контрольная точка сегмента получается прибавлением ручки к позиции соответствующего конца.

Параметры
ИмяТипПо умолчанию
positionVector2—
inVector2?default
outVector2?default
indexint-1
position

Конечная локальная позиция; SetPointIn/Out принимают относительный handle.

in

Относительный входящий handle; null/default даёт Vector2.Zero.

out

Относительный исходящий handle; null/default даёт Vector2.Zero.

index

Индекс вставки перед точкой; отрицательный/вне диапазона добавляет в конец.

ClearPointsvoid
# ClearPoints
C#
public void ClearPoints();

Удаляет управляющие точки; baked-данные очищаются при следующем запросе. Сохраняет BakeInterval. GetBakedLength пустой кривой даёт 0, GetBakedPoints — пустой массив; Sample и выборку ориентации до добавления точек не вызывайте.

GetBakeIntervalfloat
# GetBakeInterval
C#
public float GetBakeInterval();

Читает BakeInterval. Положительный конечный масштаб плотности CPU-кеша в локальных единицах, default 5. Меньше обычно даёт больше сэмплов и затрат памяти/CPU; это не точная аналитическая длина и не обещание одинакового шага. Подразделение ограничено глубиной. Setter сам не ограничивает положительность/конечность и помечает кеш dirty даже при том же значении.

Возвращает float

Сохранённый масштаб плотности кеша, default 5 локальных единиц.

GetBakedLengthfloat
# GetBakedLength
C#
public float GetBakedLength();

Лениво пересчитывает dirty-кеш и возвращает приближённую длину его полилинии в локальных единицах. Для пустой/одноточечной кривой 0. Масштаб/поворот Path2D не включаются автоматически; это не world-длина.

Возвращает float

Приближённая локальная длина baked-полилинии; 0 для пустой/одноточечной кривой.

GetBakedPointsVector2[]
# GetBakedPoints
C#
public Vector2[] GetBakedPoints();

Возвращает независимый C# массив локальных baked-позиций, обновляя кеш при необходимости. Индексы массива не являются индексами управляющих точек. Изменение массива не меняет Curve2D.

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

Новый независимый C# массив локальных позиций аппроксимации.

GetClosestOffsetfloat
# GetClosestOffset
C#
public float GetClosestOffset(Vector2 toPoint);

Возвращает локальное расстояние вдоль baked-пути до ближайшей проекции toPoint, а не поперечное расстояние до кривой и не t. Для одной точки 0; для большого кеша учитывайте полный перебор сегментов.

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

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

Возвращает float

Локальное расстояние вдоль пути до ближайшей проекции.

GetClosestPointVector2
# GetClosestPoint
C#
public Vector2 GetClosestPoint(Vector2 toPoint);

Ищет ближайшую локальную проекцию на сегменты baked-полилинии перебором. Это аппроксимация, не точное решение по исходному Bezier и не физический raycast. Для world-точки сначала Path2D.ToLocal, после запроса при необходимости ToGlobal. Вырожденные сегменты отдельно не проверены.

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

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

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

GetPointCountint
# GetPointCount
C#
public int GetPointCount();

Читает количество управляющих точек, не число сегментов или baked-позиций. Для N точек обычная Curve2D содержит N−1 сегментов при N≥2.

Возвращает int

Количество управляющих точек, не baked-сэмплов.

GetPointInVector2
# GetPointIn
C#
public Vector2 GetPointIn(int idx);

Читает относительный входящий handle. Абсолютная Bezier-контрольная позиция — GetPointPosition(idx)+GetPointIn(idx). У первой точки открытого пути этот handle не задаёт предыдущий сегмент.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

GetPointOutVector2
# GetPointOut
C#
public Vector2 GetPointOut(int idx);

Читает относительный исходящий handle. У последней точки он не создаёт дополнительный сегмент; для петли нужно явно согласовать геометрию концов.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

GetPointPositionVector2
# GetPointPosition
C#
public Vector2 GetPointPosition(int idx);

Читает локальную позицию существующей управляющей точки; не world-позицию и не baked sample. Для world-координат используйте transform соответствующего Path2D.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

RemovePointvoid
# RemovePoint
C#
public void RemovePoint(int idx);

Удаляет существующий индекс, сдвигает последующие и инвалидирует кеш. Не соединяет автоматически геометрию в замкнутую петлю.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

SampleVector2
# Sample
C#
public Vector2 Sample(int idx, float t);

Выбирает точку по параметру t сегмента idx. Равные шаги t не означают равное расстояние вдоль кривой.

Параметры
ИмяТипПо умолчанию
idxint—
tfloat—
idx

Существующий индекс управляющей точки; у Sample — индекс сегмента.

t

Конечный параметр сегмента, обычно 0..1; не расстояние и не elapsed seconds. Не рассчитывайте на автоматическое ограничение t.

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

SampleBakedVector2
# SampleBaked
C#
public Vector2 SampleBaked(float offset = 0f, bool cubic = false);

Выбирает точку по расстоянию offset в запечённом кэше. Это приближённая длина; согласуйте cubic с настройкой PathFollow2D при сравнении.

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

Конечное локальное расстояние по baked-кешу; ограничивается 0..GetBakedLength().

cubic

true интерполирует кеш кубически, default false — линейно. На редком кеше позиции могут отличаться даже для прямого пути.

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

SampleBakedWithRotationTransform2D
# SampleBakedWithRotation
C#
public Transform2D SampleBakedWithRotation(float offset = 0f, bool cubic = false);

Возвращает локальный Transform2D: Origin — выбранная baked-позиция, ось +X — касательная, +Y — перпендикуляр. offset — конечное расстояние с ограничением 0..length; cubic меняет интерполяцию позиций. Для ориентации нужны минимум две невырожденные точки: одна даёт диагностику. Не включает transform Path2D и не присваивает положение Entity автоматически.

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

Конечное локальное расстояние по baked-кешу; ограничивается 0..GetBakedLength().

cubic

true интерполирует кеш кубически, default false — линейно. На редком кеше позиции могут отличаться даже для прямого пути.

Возвращает Transform2D

Локальный Transform2D с +X по касательной; не world transform.

SamplefVector2
# Samplef
C#
public Vector2 Samplef(float fofs);

Целая часть fofs — индекс сегмента, дробная — t. Не нормализованная доля всей кривой и не число локальных единиц. За пределами диапазона возвращает крайние точки, не делает looping. Используйте корректные сегменты 0..PointCount−2 для обычной выборки.

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

Индекс сегмента плюс дробный t; не normalized ratio всей кривой.

Возвращает Vector2

Локальный вектор/позиция; нулевой fallback при диагностике не считайте доказательством успеха.

SetBakeIntervalvoid
# SetBakeInterval
C#
public void SetBakeInterval(float distance);

Устанавливает BakeInterval. Положительный конечный масштаб плотности CPU-кеша в локальных единицах, default 5. Меньше обычно даёт больше сэмплов и затрат памяти/CPU; это не точная аналитическая длина и не обещание одинакового шага. Подразделение ограничено глубиной. Setter сам не ограничивает положительность/конечность и помечает кеш dirty даже при том же значении.

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

Положительный конечный BakeInterval в локальных единицах; валидируйте в вызывающем коде.

SetPointCountvoid
# SetPointCount
C#
public void SetPointCount(int count);

Устанавливает PointCount. Количество управляющих точек, не baked-сэмплов. Рост добавляет нулевые позиции/handles и может испускать Changed для каждой точки; уменьшение отбрасывает конец. Это не атомарное назначение новой кривой. Для смены готового пути сначала подготовьте отдельный ресурс, затем назначьте Path2D.Curve.

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

Неотрицательное количество управляющих точек; рост добавляет нулевые данные.

SetPointInvoid
# SetPointIn
C#
public void SetPointIn(int idx, Vector2 position);

Задаёт относительный входящий handle существующей точки и инвалидирует кеш. Это не world-позиция и не координата соседней точки.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

position

Конечная локальная позиция; SetPointIn/Out принимают относительный handle.

SetPointOutvoid
# SetPointOut
C#
public void SetPointOut(int idx, Vector2 position);

Задаёт относительный исходящий handle существующей точки и инвалидирует кеш. Абсолютная контрольная позиция получается добавлением к позиции этой точки.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

position

Конечная локальная позиция; SetPointIn/Out принимают относительный handle.

SetPointPositionvoid
# SetPointPosition
C#
public void SetPointPosition(int idx, Vector2 position);

Меняет локальную позицию существующей точки, сохраняя её относительные handles. Инвалидирует кеш и испускает Changed; общий ресурс изменится для всех владельцев.

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

Существующий индекс управляющей точки; у Sample — индекс сегмента.

position

Конечная локальная позиция; SetPointIn/Out принимают относительный handle.

TessellateVector2[]
# Tessellate
C#
public Vector2[] Tessellate(int maxStages = 5, float toleranceDegrees = 4f);

Возвращает локальную полилинию адаптивного подразделения по угловому критерию toleranceDegrees. maxStages ограничивает глубину, не количество точек. Не меняет управляющие данные и не обещает одинаковые расстояния или точную длину.

Параметры
ИмяТипПо умолчанию
maxStagesint5
toleranceDegreesfloat4f
maxStages

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

toleranceDegrees

Положительный конечный угловой критерий в градусах, ограниченный maxStages.

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

Новый независимый C# массив локальных позиций аппроксимации.

TessellateEvenLengthVector2[]
# TessellateEvenLength
C#
public Vector2[] TessellateEvenLength(int maxStages = 5, float toleranceLength = 20f);

Возвращает локальную полилинию по критерию длины toleranceLength, публичный default SDK 1.0.0 — 20 локальных единиц. Не путайте с default 0.2 у Curve3D. maxStages ограничивает глубину: строго одинаковый шаг или достижение допуска не гарантируются. Требуется минимум две точки.

Параметры
ИмяТипПо умолчанию
maxStagesint5
toleranceLengthfloat20f
maxStages

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

toleranceLength

Положительный конечный критерий длины в локальных единицах; публичный default 20.

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

Новый независимый C# массив локальных позиций аппроксимации.

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

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

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

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