Выражения. Метод numKeys After Effects

 

 

В After Effects метод numKeys используется в выражениях, чтобы узнать количество ключевых кадров на свойстве. Это может быть полезно при автоматизации поведения анимации, если, например, нужно что-то изменить в зависимости от наличия или количества ключей.

Список эффектов и не только After Effects
Выражения After Effects список

thisComp.layer(«Слой-фигура 1»).transform.position.numKeys; //Узнать количество ключей на слое

——————

if (thisComp.layer(«Слой-фигура 1»).transform.position.numKeys > 0) {
thisComp.layer(«Слой-фигура 1»).transform.position.valueAtTime(thisComp.layer(«Слой-фигура 1»).transform.position.key(1).time);
} else {
thisComp.layer(«Слой-фигура 1»).transform.position;
}

Если есть хотя бы один ключевой кадр, выражение возвращает значение в первом ключе. Иначе — текущее значение.

——————

Проверка наличия ключей. Если есть хотя бы один ключ, то происходит поворот по часовой стрелке. Если нет, то в противоположном направлении

if (numKeys > 0) {
transform.rotation + time * 30;
} else {
transform.rotation — time * 90;
}

——————-

Автоматический цикл между ключами

if (numKeys > 1) {
loopOut(«cycle»);
} else {
value;
}

Цикличная анимация работает только если есть хотя бы два ключа. Иначе — обычное значение.

—————

Вы можете использовать numKeys, чтобы случайно выбирать значения ключевых кадров.

var prop = thisProperty;
if (prop.numKeys > 0) {
var randomKey = Math.floor(random(1, prop.numKeys + 1)); // Случайный индекс ключа
prop.valueAtTime(prop.key(randomKey).time); // Значение случайного ключа
} else {
prop.value; // Значение по умолчанию
}

Этот код полезен для создания случайных эффектов, например, для изменения цвета, позиции или масштаба на основе ключевых кадров.

numKeys возвращает целое число, представляющее количество ключевых кадров в свойстве.

Если ключевых кадров нет, numKeys возвращает 0, и попытка доступа к key(1) вызовет ошибку, поэтому всегда проверяйте numKeys > 0.

Метод работает с любым анимируемым свойством (позиция, масштаб, вращение, прозрачность и т.д.).

———————

Имитация инерционного отскока

amp = 0.6; // Амплитуда отскока
freq = 6; // Частота колебаний
decay = 5.0; // Затухание
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n—;
}
if (n > 0 && time — key(n).time < 4) {

t = time — key(n).time; v = velocityAtTime(key(n).time — thisComp.frameDuration / 10); value + v * amp * Math.sin(freq * t * 2 * Math.PI) / Math.exp(decay * t);

} else {

value; }

 

Код проверяет, есть ли ключевые кадры (numKeys > 0) и определяет ближайший ключевой кадр (nearestKey).
velocityAtTime(key(n).time — thisComp.frameDuration / 10) получает скорость свойства перед ключевым кадром.
Используется формула синусоидального колебания с затуханием (Math.sin и Math.exp), чтобы создать эффект отскока.
Объект «подпрыгивает» после достижения ключевого кадра, как будто он ударяется о поверхность.