Итак, мы делаем 2D-анимацию. У нас есть активы персонажей в PSD.
У нас есть композиция «Персонаж», которая содержит следующее: композиция «Глаза», композиция «Рот» и композиция «Тело». «Тело» имеет 2-секундный цикл ходьбы персонажа. Который по времени переназначается на цикл в «Персонаже». Но когда персонаж идет, его тело совершает волнообразные движения вверх и вниз. Проблема начинается здесь: мы должны синхронизировать «Глаза» и «Рот» с движением тела вверх и вниз. Привязка положения указанных слоев к положению ассета тела невозможна, потому что у ассета тела всего 2 секунды анимации. После этого «Рот» и «Глаза» просто останавливаются, где бы они ни были.
Я думаю, что должен быть способ сделать это с помощью выражений. Но поскольку мы не разбираемся в коде, мы не можем сесть и написать его.
Как мы можем достичь такой цели?
Спасибо за помощь.
Редактировать: Вы можете скачать наш комп отсюда: http://www.mediafire.com/download/v255kgid7ej56m0/walk.zip
Если вы хотите связать определенные свойства через несколько композиций, вы можете сделать это только с помощью выражений. Они на самом деле не сложные, и это вопрос 1-2 строк.
Fe, чтобы получить положение слоя в другой композиции, вы можете сделать это:
comp("Comp Name").layer("Layer Name").transform.position
Просто нажмите, удерживая клавишу Alt, на секундомер позиции слоя, к которому вы хотите применить эту позицию, и введите эту команду. Чтобы сломать его. Сначала выберите нужную композицию по имени, а затем выберите нужный слой в этой композиции:
comp("Comp Name").layer("Layer Name")
В этой части говорится, что вам нужно значение из transform
меню, и имя значения position
. Положение также может быть просто вращением или любым другим свойством:
.transform.position
Обратите внимание, что вы часто получаете несколько значений одновременно. Например, позиция может иметь 2 или 3 значения в зависимости от того, является ли слой 2D или 3D. Эти множественные значения передаются вам в виде чего-то, называемого массивом или вектором. То, что приходит сейчас, необходимо только в том случае, если вы хотите независимое управление осями, а не значение положения всех 2 или 3 осей, применяемых к вашему слою. Итак, чтобы получить только положение оси Y, вы можете сделать это:
y = comp("Comp 1").layer("layer1").transform.position[1];
[transform.position[0],y]
Выдуманное имя переменной y в этом случае получает присвоенное значение по оси layer1
Y. добавив [1]
в конце position
. Использование [0]
даст вам x и [2]
даст вам z.
Эта часть — то, что вы называете возвращаемым значением. Вы пишете его в виде массива/вектора. Значение [x-axis-value,y-axis-value]
или [x-axis,y-axis,z-axis]
. transform.position[0]
просто означает, что мне нужно значение x ЭТОГО слоя, в котором я ввожу выражение. Таким образом, вы все равно можете управлять этой осью вручную.
[transform.position[0],y]
Чтобы учесть переназначение времени, вам нужно будет применить то же переназначение к comp2, что и к comp1. Если это не то, что вам нужно, мне, возможно, придется увидеть пример проекта.
Редактировать: поэтому, если вы используете переназначение времени для зацикливания слоев, а не для точной настройки анимации, вы не должны использовать его в этой ситуации. Чтобы сохранить лучший контроль, вы должны использовать простое выражение для анимированных ресурсов вашей зацикленной композиции, чтобы зациклить анимацию.
loopOut(type = "cycle", numKeyFrame = 0);
Добавьте это к каждому свойству слоя, которое анимировано, и сделайте длину композиции такой, какая вам нужна, ваша 2-секундная анимация теперь будет повторяться до тех пор, пока длится ваша композиция, вам просто нужно растянуть длину слоев до новой длины композиции. Это решает вашу проблему.
Если у вас есть больше подкомпозиций в вашей подкомпозиции, вам, конечно, придется увеличить их длину, чтобы вы могли растянуть их до конца их родительской композиции.
Для получения дополнительной информации об этом выражении взгляните на это: http://provideocoalition.com/pvcexclusive/story/expression_shorts_-_loop
тимонску
Гёкче Озан