Document the default Design layout, agent mentions and follow controls, curve preset editing, and Scene View lighting toggles in English and Russian.
106 lines
6.5 KiB
Markdown
106 lines
6.5 KiB
Markdown
---
|
|
id: curves
|
|
title: Кривые
|
|
---
|
|
# Кривые
|
|
|
|
Кривая сопоставляет времени значение. Поля компонентов типа `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]] }
|