Выделите в Channel Box атрибут rotateZ и вызовите Expression Editor.
Введите формулу:
min.rz=sec.rz/60; Нажмите Create.
«Повозите» мышкой по временной линейке, убедитесь, что стрелки вращаются согласованно. Сделайте еще одну стрелку, часовую.
Назовите ее hour.
Она должна вращаться в двенадцать раз медленнее минутной, поэтому expression для нее будет выглядеть следующим образом:
hour.rz=min.rz/12; Теперь вы имеете процедурно анимированные часы. Скорость вращения соответствует сейчас реальному течению мирового времени. Однако для создания нереалистичных эффектов хотелось бы иметь атрибут, управляющий скоростью вращения стрелок. Коль скоро основной у нас является секундная стрелка, добавим атрибут к ней.
Выберите объект sec и выполните Modify=>Add Attribute.
Назовите новый атрибут speed, задайте Minimum=-10, Maximum=10, Default=1.
Нажмите ОК.
Теперь снова выделите атрибут rotateZ в Channel Box и откройте Expression Editor. Исправьте формулу для секундной стрелки:
sec.rotateZ = -int(time)*6*sec.speed; Запустите анимацию и попробуйте менять атрибут speed.
Таким образом, вы получили контроль над скоростью хода часов.
Для того, чтобы останавливать часы или, наоборот, заставлять их вращаться с бешенной скоростью, вы можете ставить ключи на атрибут speed секундной стрелки.
Для того, чтобы получить вконец обезумевшие часы и остаться в рамках процедурного подхода, выделите атрибут speed в Channel Box, вызовите Expression Editor и введите формулу:
sec.speed = noise(time)*10; Это заставит меняться скорость вращения беспорядочным образом в диапазоне от 10 до минус 10. Если вы захотите замедлить (или ускорить) стремительность таких изменений, введите в формулу дополнительный коэффициент:
sec.speed = noise(time*0.5)*10; Приручение Expression Editor
Некоторые из вас, наверное, уже столкнулись с некоторыми «бестактностями» в поведении Expression Editor. Если вы, печатая свою магическую формулу, вдруг решили на секундочку выбрать другой объект, чтобы, например, проверить значения его атрибутов, все ваши «печатные труды» тут же исчезнут! Чтобы сохранить свои нервы, напечатанный текст, а заодно призвать к порядку Expression Editor, следует знать о двух режимах работы с ним.
По умолчанию включен первый режим, когда в Expression Editor отображаются expressions только для выбранного объекта. Поэтому при случайном щелчке мыши в окне камеры весь введенный текст пропадает.
Второй, более гуманный (на мой взгляд) режим, отображает в окне Expression Editor все имеющиеся в текущей сцене expressions.
Эти режимы переключаются в меню Expression Editor с помощью пунктов Select Filter=>By Object Name и Select Filter=>By Expression Name, соответственно.
Два этих режима отражают два идеологических подхода к expressions. Первый рассматривает expressions как, например, анимационные кривые, которые жестко закреплены за определенными атрибутами и рассматриваются только вместе с объектом. В этом режиме, чтобы увидеть код нужного expression, недостаточно выбрать объект: надо дополнительно в окне Expression Editor выбрать атрибут объекта, на который этот expression влияет. В этом режиме весьма полезно ограничить отображение в Expression Editor только тех атрибутов, для которых уже созданы expressions. Это можно сделать в меню Expression Editor, выбрав Attribute Filter=>Connected to Expressions. Заметьте также, что в меню Object Filter также существуют разные варианты, «фильтрующие» отображение в списке Objects объектов тех или иных типов.