Document the default Design layout, agent mentions and follow controls, curve preset editing, and Scene View lighting toggles in English and Russian.
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]] }