reckfellENGINE

Curve

Кубическая функция Y от X с касательными и кэшем выборки.

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

Curve хранит точки (X, Y) и касательные dy/dx. Sample вычисляет исходную кривую; SampleBaked использует равномерный кэш с линейной интерполяцией. Это не траектория Curve2D/Curve3D. Координата выборки задаётся в единицах домена, который по умолчанию равен 0…1.

Для прямого перехода задайте Linear: нулевые касательные Free по умолчанию дают плавную кубическую кривую. Полный пример:

C#
using Reckfell;

public static class UnitRamp
{
    public static Curve Create()
    {
        var curve = new Curve { BakeResolution = 128 };
        curve.AddPoint(Vector2.Zero,
            leftMode: Curve.TangentMode.Linear, rightMode: Curve.TangentMode.Linear);
        curve.AddPoint(Vector2.One,
            leftMode: Curve.TangentMode.Linear, rightMode: Curve.TangentMode.Linear);
        return curve;
    }
}

AddPoint ограничивает позицию границами, SetPointValue не ограничивает Y, а SetPointOffset повторно ограничивает обе координаты и возвращает новый индекс. Не храните индексы как постоянные идентификаторы. Границы значений не ограничивают выбросы кубической интерполяции.

BakeResolution меняет точность кэша, но не испускает Changed. После его изменения вызовите EmitChanged(), если связанная CurveTexture должна обновиться. При разрешении 1 кэш постоянен и равен последнему Y.

Известный дефект текущей версии: CleanDupes удаляет даже точки с разными X. Не вызывайте его на рабочих данных. Следующий проверенный помощник сохраняет различные позиции и удаляет правую точку только при точном равенстве соседних X; он не объединяет близкие значения и не исправляет нативный метод:

C#
using System;
using Reckfell;

public static class CurveTools
{
    // Removes the right-hand point only when adjacent X values are exactly equal.
    public static int RemoveExactDuplicateOffsets(Curve curve)
    {
        ArgumentNullException.ThrowIfNull(curve);
        int removed = 0;
        for (int i = curve.GetPointCount() - 1; i > 0; i--)
        {
            if (curve.GetPointPosition(i).X == curve.GetPointPosition(i - 1).X)
            {
                curve.RemovePoint(i);
                removed++;
            }
        }
        return removed;
    }
}

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

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

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

Создаёт пустую кривую с доменом и диапазоном 0…1 и BakeResolution=100.

Свойства8

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

Число отсчётов запечённого кэша, 1…1000, по умолчанию 100. Используйте минимум 2 для переменного значения. Setter помечает кэш устаревшим, но не испускает Changed: для обновления связанной CurveTexture после этой настройки вызовите EmitChanged().

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

Верхняя граница X, изначально 1. Setter сохраняет последнюю точку и зазор не меньше 0.01 до MinDomain; не масштабирует точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

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

Верхняя граница добавляемых Y, изначально 1. Setter сохраняет существующий максимум точек и зазор не меньше 0.01 до MinValue. Касательные могут дать результат выше границы; вызывает RangeChanged без Changed.

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

Нижняя граница X, изначально 0. Setter сохраняет первую точку и зазор не меньше 0.01 до MaxDomain; не переносит точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

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

Нижняя граница добавляемых Y, изначально 0. Setter сохраняет существующий минимум точек и зазор не меньше 0.01 до MaxValue. Не ограничивает результат кубической интерполяции; вызывает RangeChanged без Changed.

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

Число точек, изначально 0. Уменьшение отбрасывает конец массива. Увеличение не распределяет X равномерно: для пустой кривой новые X равны ограниченному доменом нулю, иначе MaxDomain. Для осмысленного распределения добавляйте точки через AddPoint.

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

Внутреннее свойство сериализации: по пять элементов на точку — Vector2, левая и правая касательные, левый и правый режимы. Getter возвращает отдельный контейнер. Setter не сортирует и не ограничивает позиции; для пользовательского кода используйте методы точек, не редактируйте формат хранения.

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

Внутреннее свойство сериализации: [MinValue, MaxValue, MinDomain, MaxDomain]. Getter возвращает отдельный контейнер. Setter загрузки обходит публичные ограничения и уведомления; меняйте границы через публичные свойства.

Методы32

AddPointint
# AddPoint
C#
public int AddPoint(Vector2 position, float leftTangent = 0f, float rightTangent = 0f, Curve.TangentMode leftMode = Curve.TangentMode.Free, Curve.TangentMode rightMode = Curve.TangentMode.Free);

Ограничивает X доменом, Y диапазоном значений и вставляет точку по X. Возвращает её текущий индекс. Нулевые касательные Free по умолчанию дают плавный кубический переход, а не прямую линию; для прямой задайте Linear с обеих сторон.

Параметры
ИмяТипПо умолчанию
positionVector2—
leftTangentfloat0f
rightTangentfloat0f
leftModeCurve.TangentModeCurve.TangentMode.Free
rightModeCurve.TangentModeCurve.TangentMode.Free
position

Конечные X и Y; AddPoint ограничивает их текущими границами.

leftTangent

Наклон dy/dx левой касательной; по умолчанию 0.

rightTangent

Наклон dy/dx правой касательной; по умолчанию 0.

leftMode

Free или Linear для левой стороны.

rightMode

Free или Linear для правой стороны.

Возвращает int

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

Bakevoid
# Bake
C#
public void Bake();

Пересоздаёт равномерный кэш по текущему домену и BakeResolution. SampleBaked также пересоздаёт устаревший кэш при обращении; Sample использует исходную кривую.

CleanDupesvoid
# CleanDupes
C#
public void CleanDupes();

Не используйте в текущей версии: проверка на трёх точках с разными X оставила одну. Нативное сравнение ошибочно удаляет и различные соседние позиции. Дефект движка не исправлен; пример RemoveExactDuplicateOffsets в описании класса удаляет только точно равные X.

ClearPointsvoid
# ClearPoints
C#
public void ClearPoints();

Удаляет все точки. После очистки Sample и SampleBaked возвращают 0.

GetBakeResolutionint
# GetBakeResolution
C#
public int GetBakeResolution();

Число отсчётов запечённого кэша, 1…1000, по умолчанию 100. Используйте минимум 2 для переменного значения. Setter помечает кэш устаревшим, но не испускает Changed: для обновления связанной CurveTexture после этой настройки вызовите EmitChanged().

Возвращает int

Число отсчётов запечённого кэша, 1…1000, по умолчанию 100. Используйте минимум 2 для переменного значения. Setter помечает кэш устаревшим, но не испускает Changed: для обновления связанной CurveTexture после этой настройки вызовите EmitChanged().

GetDomainRangefloat
# GetDomainRange
C#
public float GetDomainRange();

Возвращает MaxDomain − MinDomain в единицах координаты X.

Возвращает float

Возвращает MaxDomain − MinDomain в единицах координаты X.

GetMaxDomainfloat
# GetMaxDomain
C#
public float GetMaxDomain();

Верхняя граница X, изначально 1. Setter сохраняет последнюю точку и зазор не меньше 0.01 до MinDomain; не масштабирует точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

Возвращает float

Верхняя граница X, изначально 1. Setter сохраняет последнюю точку и зазор не меньше 0.01 до MinDomain; не масштабирует точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

GetMaxValuefloat
# GetMaxValue
C#
public float GetMaxValue();

Верхняя граница добавляемых Y, изначально 1. Setter сохраняет существующий максимум точек и зазор не меньше 0.01 до MinValue. Касательные могут дать результат выше границы; вызывает RangeChanged без Changed.

Возвращает float

Верхняя граница добавляемых Y, изначально 1. Setter сохраняет существующий максимум точек и зазор не меньше 0.01 до MinValue. Касательные могут дать результат выше границы; вызывает RangeChanged без Changed.

GetMinDomainfloat
# GetMinDomain
C#
public float GetMinDomain();

Нижняя граница X, изначально 0. Setter сохраняет первую точку и зазор не меньше 0.01 до MaxDomain; не переносит точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

Возвращает float

Нижняя граница X, изначально 0. Setter сохраняет первую точку и зазор не меньше 0.01 до MaxDomain; не переносит точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

GetMinValuefloat
# GetMinValue
C#
public float GetMinValue();

Нижняя граница добавляемых Y, изначально 0. Setter сохраняет существующий минимум точек и зазор не меньше 0.01 до MaxValue. Не ограничивает результат кубической интерполяции; вызывает RangeChanged без Changed.

Возвращает float

Нижняя граница добавляемых Y, изначально 0. Setter сохраняет существующий минимум точек и зазор не меньше 0.01 до MaxValue. Не ограничивает результат кубической интерполяции; вызывает RangeChanged без Changed.

GetPointCountint
# GetPointCount
C#
public int GetPointCount();

Число точек, изначально 0. Уменьшение отбрасывает конец массива. Увеличение не распределяет X равномерно: для пустой кривой новые X равны ограниченному доменом нулю, иначе MaxDomain. Для осмысленного распределения добавляйте точки через AddPoint.

Возвращает int

Число точек, изначально 0. Уменьшение отбрасывает конец массива. Увеличение не распределяет X равномерно: для пустой кривой новые X равны ограниченному доменом нулю, иначе MaxDomain. Для осмысленного распределения добавляйте точки через AddPoint.

GetPointLeftModeCurve.TangentMode
# GetPointLeftMode
C#
public Curve.TangentMode GetPointLeftMode(int index);

Возвращает режим касательной существующей точки: Free или Linear.

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

Индекс существующей точки: 0 ≤ index < PointCount.

Возвращает Curve.TangentMode

Возвращает режим касательной существующей точки: Free или Linear.

GetPointLeftTangentfloat
# GetPointLeftTangent
C#
public float GetPointLeftTangent(int index);

Возвращает наклон dy/dx касательной существующей точки, не угол в градусах.

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

Индекс существующей точки: 0 ≤ index < PointCount.

Возвращает float

Возвращает наклон dy/dx касательной существующей точки, не угол в градусах.

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

Возвращает (X, Y) существующей точки. Индексы могут измениться после вставки, удаления и SetPointOffset.

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

Индекс существующей точки: 0 ≤ index < PointCount.

Возвращает Vector2

Возвращает (X, Y) существующей точки. Индексы могут измениться после вставки, удаления и SetPointOffset.

GetPointRightModeCurve.TangentMode
# GetPointRightMode
C#
public Curve.TangentMode GetPointRightMode(int index);

Возвращает режим касательной существующей точки: Free или Linear.

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

Индекс существующей точки: 0 ≤ index < PointCount.

Возвращает Curve.TangentMode

Возвращает режим касательной существующей точки: Free или Linear.

GetPointRightTangentfloat
# GetPointRightTangent
C#
public float GetPointRightTangent(int index);

Возвращает наклон dy/dx касательной существующей точки, не угол в градусах.

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

Индекс существующей точки: 0 ≤ index < PointCount.

Возвращает float

Возвращает наклон dy/dx касательной существующей точки, не угол в градусах.

GetValueRangefloat
# GetValueRange
C#
public float GetValueRange();

Возвращает MaxValue − MinValue; это не фактическая амплитуда интерполированной кривой.

Возвращает float

Возвращает MaxValue − MinValue; это не фактическая амплитуда интерполированной кривой.

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

Удаляет существующую точку по индексу и обновляет соседние автоматические касательные. Допускает удаление последней точки.

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

Индекс существующей точки: 0 ≤ index < PointCount.

Samplefloat
# Sample
C#
public float Sample(float offset);

Вычисляет кубическую кривую в конечной координате домена, не обязательно 0…1. До первой и после последней точки возвращает крайний Y; пустая кривая даёт 0, одна точка — постоянный Y. Касательные могут вывести результат за MinValue/MaxValue.

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

Конечная координата X в единицах домена.

Возвращает float

Вычисляет кубическую кривую в конечной координате домена, не обязательно 0…1. До первой и после последней точки возвращает крайний Y; пустая кривая даёт 0, одна точка — постоянный Y. Касательные могут вывести результат за MinValue/MaxValue.

SampleBakedfloat
# SampleBaked
C#
public float SampleBaked(float offset);

При необходимости запекает кэш и линейно интерполирует его отсчёты в координатах домена. Это приближение Sample. При BakeResolution=1 весь кэш равен последнему Y; используйте минимум 2 для переменной кривой.

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

Конечная координата X в единицах домена.

Возвращает float

При необходимости запекает кэш и линейно интерполирует его отсчёты в координатах домена. Это приближение Sample. При BakeResolution=1 весь кэш равен последнему Y; используйте минимум 2 для переменной кривой.

SetBakeResolutionvoid
# SetBakeResolution
C#
public void SetBakeResolution(int resolution);

Число отсчётов запечённого кэша, 1…1000, по умолчанию 100. Используйте минимум 2 для переменного значения. Setter помечает кэш устаревшим, но не испускает Changed: для обновления связанной CurveTexture после этой настройки вызовите EmitChanged().

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

Число отсчётов 1…1000; для переменной кривой минимум 2.

SetMaxDomainvoid
# SetMaxDomain
C#
public void SetMaxDomain(float max);

Верхняя граница X, изначально 1. Setter сохраняет последнюю точку и зазор не меньше 0.01 до MinDomain; не масштабирует точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

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

Запрошенная конечная верхняя граница; setter сохраняет существующие точки и минимальный зазор.

SetMaxValuevoid
# SetMaxValue
C#
public void SetMaxValue(float max);

Верхняя граница добавляемых Y, изначально 1. Setter сохраняет существующий максимум точек и зазор не меньше 0.01 до MinValue. Касательные могут дать результат выше границы; вызывает RangeChanged без Changed.

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

Запрошенная конечная верхняя граница; setter сохраняет существующие точки и минимальный зазор.

SetMinDomainvoid
# SetMinDomain
C#
public void SetMinDomain(float min);

Нижняя граница X, изначально 0. Setter сохраняет первую точку и зазор не меньше 0.01 до MaxDomain; не переносит точки. Помечает кэш устаревшим и испускает Changed и DomainChanged.

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

Запрошенная конечная нижняя граница; setter сохраняет существующие точки и минимальный зазор.

SetMinValuevoid
# SetMinValue
C#
public void SetMinValue(float min);

Нижняя граница добавляемых Y, изначально 0. Setter сохраняет существующий минимум точек и зазор не меньше 0.01 до MaxValue. Не ограничивает результат кубической интерполяции; вызывает RangeChanged без Changed.

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

Запрошенная конечная нижняя граница; setter сохраняет существующие точки и минимальный зазор.

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

Число точек, изначально 0. Уменьшение отбрасывает конец массива. Увеличение не распределяет X равномерно: для пустой кривой новые X равны ограниченному доменом нулю, иначе MaxDomain. Для осмысленного распределения добавляйте точки через AddPoint.

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

Новое неотрицательное число точек; рост не распределяет X равномерно.

SetPointLeftModevoid
# SetPointLeftMode
C#
public void SetPointLeftMode(int index, Curve.TangentMode mode);

Меняет левую касательную: Free использует заданный наклон, Linear вычисляет наклон по соседней точке. ModeCount — служебное значение, не режим.

Параметры
ИмяТипПо умолчанию
indexint—
modeCurve.TangentMode—
index

Индекс существующей точки: 0 ≤ index < PointCount.

mode

Free или Linear; не ModeCount.

SetPointLeftTangentvoid
# SetPointLeftTangent
C#
public void SetPointLeftTangent(int index, float tangent);

Задаёт левую касательную как dy/dx и переводит её в Free. Большой наклон может вызвать выход Y за диапазон значений.

Параметры
ИмяТипПо умолчанию
indexint—
tangentfloat—
index

Индекс существующей точки: 0 ≤ index < PointCount.

tangent

Конечный наклон dy/dx, не угол.

SetPointOffsetint
# SetPointOffset
C#
public int SetPointOffset(int index, float offset);

Перевставляет точку с новым X, ограничивает X доменом и также повторно ограничивает её Y диапазоном значений. Возвращает новый индекс; прежний индекс нельзя считать постоянным идентификатором.

Параметры
ИмяТипПо умолчанию
indexint—
offsetfloat—
index

Индекс существующей точки: 0 ≤ index < PointCount.

offset

Конечная координата X в единицах домена.

Возвращает int

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

SetPointRightModevoid
# SetPointRightMode
C#
public void SetPointRightMode(int index, Curve.TangentMode mode);

Меняет правую касательную: Free использует заданный наклон, Linear вычисляет наклон по соседней точке. ModeCount — служебное значение, не режим.

Параметры
ИмяТипПо умолчанию
indexint—
modeCurve.TangentMode—
index

Индекс существующей точки: 0 ≤ index < PointCount.

mode

Free или Linear; не ModeCount.

SetPointRightTangentvoid
# SetPointRightTangent
C#
public void SetPointRightTangent(int index, float tangent);

Задаёт правую касательную как dy/dx и переводит её в Free. Большой наклон может вызвать выход Y за диапазон значений.

Параметры
ИмяТипПо умолчанию
indexint—
tangentfloat—
index

Индекс существующей точки: 0 ≤ index < PointCount.

tangent

Конечный наклон dy/dx, не угол.

SetPointValuevoid
# SetPointValue
C#
public void SetPointValue(int index, float y);

Заменяет Y существующей точки без ограничения MinValue/MaxValue и обновляет автоматические касательные. Последующая перевставка через SetPointOffset снова ограничит Y.

Параметры
ИмяТипПо умолчанию
indexint—
yfloat—
index

Индекс существующей точки: 0 ≤ index < PointCount.

y

Конечное значение Y; этим setter не ограничивается диапазоном.

Сигналы и события2

DomainChangedСобытие
# DomainChanged
C#
public event Action DomainChanged;

Уведомление из setter границ домена; сопровождается Changed и обновлением кэша при следующей выборке. Не означает, что точки были перемещены.

RangeChangedСобытие
# RangeChanged
C#
public event Action RangeChanged;

Уведомление из setter границ значений. Само по себе не испускает Changed и не обновляет связанные текстуры.

Curve.TangentMode

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

Касательная по эту сторону точки определяется пользователем.

Linear = 1

Кривая вычисляет касательную по эту сторону от точки как наклон на полпути к соседней точке.

ModeCount = 2

Общее количество доступных касательных мод.

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

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

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

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