Files
sanspie 1f47880e8a docs: update editor guidance for 0.12.1
Document the default Design layout, agent mentions and follow controls, curve preset editing, and Scene View lighting toggles in English and Russian.
2026-11-05 22:41:19 +03:00

6.5 KiB

id, title
id title
curves Кривые

Кривые

Кривая сопоставляет времени значение. Поля компонентов типа curve.Curve описывают спады, разгоны скорости и затухания; твин может следовать кривой вместо функции плавности.


id: curves/shape title: Пресеты и ключи

Пресеты и ключи

Кривая — это либо пресет, либо список ключей. Пресет быстро выбрать; ключи дают любую форму.

Пресеты

Пресет — это функция плавности на времени 0..1: linear и семейство in/out/inOut для quad, cubic, sine, expo, back, elastic и bounce.

Ключи

У каждого ключа есть время, значение, два наклона, режим сегмента и режим касательной.

Сегмент От этого ключа до следующего
Безье плавно, форму задают наклоны
Линейная прямая линия
Ступенька держит значение этого ключа
Касательная Наклоны
Авто следуют соседям и никогда не выходят за них
Линейная направлены на соседние ключи
Свободная задаются вручную; входящий и исходящий могут различаться

До и После определяют, что происходит за пределами ключей: Clamp удерживает крайнее значение, Loop повторяет, Ping-pong повторяет зеркально. Кривые считаются во float32 и вычисляются одинаково на всех платформах.


id: curves/editor title: Редактирование кривых

Редактирование кривых

«Инспектор» рисует кривую внутри поля; щелчок открывает редактор кривых.

  • Пресет переключает между пресетами и Ключами. Выбор «Ключей» приближает форму пресета редактируемыми ключами. Можно также потянуть сам график пресета: при движении он превращается в ключи, а выбранная точка перемещается.
  • Дважды щёлкните по графику, чтобы добавить ключ на кривой, щёлкните правой кнопкой по ключу, чтобы удалить его, перетащите ключ или ручку наклона, чтобы изменить их.
  • Удерживайте Ctrl (Cmd на macOS), чтобы привязываться к сетке в 1/20 вида; удерживайте Shift, перетаскивая ручку наклона, чтобы двигать только одну сторону.
  • Время, Значение, Сегмент и Касательная меняют выбранный ключ; перетаскивание ручки делает его касательную свободной.

Каждое перетаскивание — один шаг отмены. Отмена перетаскивания пресета возвращает исходный пресет, а повтор восстанавливает изменённые ключи. Экземпляры префабов показывают переопределённую кривую, как любое другое поле.


id: curves/scripts title: Кривые в скриптах

Кривые в скриптах

Скрипт читает поле-кривую компонента и вычисляет его через aego/curve:

import "aego/curve"

func Update(dt float) {
  age += dt
  fade := node.Get<Fader>().Alpha
  sr.Tint.A = curve.Eval(fade, age / curve.Duration(fade))
}
Функция
Eval(c, t) float значение в t с учётом «До» и «После»
EvalClamped(c, t) float значение в t, ограниченном первым и последним ключом
Duration(c) float время от первого до последнего ключа, 1 для пресета
Ease(e, t) float функция плавности пресета в t, ограниченном 0..1

Константы curve.Linear, curve.OutQuad и остальные имеют тип curve.Easing и служат аргументом ease для твинов.

Значение Curve — это представление поля только для чтения, а не копия: оно видит правки, сделанные после чтения. Скрипты не могут строить кривые или экспортировать поля-кривые. Представление, чей узел или компонент исчез, завершается ошибкой AES6004.


id: curves/go title: Кривые в Go

Кривые в Go

type Fader struct {
  Alpha curve.Curve `aego:"alpha"`
}

c := curve.Keyed(curve.Key{T: 0, V: 1}, curve.Key{T: 0.5, V: 1, Interp: curve.InterpLinear}, curve.Key{T: 1, V: 0})
v := c.Eval(0.75)
Функция
FromEasing(e), Line(t0, v0, t1, v1), Constant(v), Keyed(keys...) построение
Eval, EvalClamped, Span, Duration, Range(samples) чтение
Fix, Smooth, Normalize, Bake(samples) помощники для правки

Keyed и Fix сортируют ключи, отбрасывают ключи с NaN и из двух ключей с одним временем оставляют последний. Меняйте Keys напрямую только вместе с Fix или Smooth.

В сценах и префабах кривая записывается как структура; значения по умолчанию опускаются, а у пресета нет ключей:

falloff={ ease=outQuad post=pingPong }
alpha={ keys=[[0, 1, 0, 0, bezier, auto], [1, 0, -2, -2, linear, free]] }