Воплотим в жизнь основной принцип иерархической анимации: сейчас у юлы есть две ноды типа transform - собственно сам объект spin и группа axis. Поскольку нода axis находится по иерархии выше ноды spin, сначала будут выполнены все трансформации для группы axis, а затем к результату будут применены вращения объекта spin. Выберите группу axis и поставьте пять ключей на вращение в следующих кадрах.
Кадр 0: rotateX=30, rotateZ=0. Кадр 25: rotateX=0, rotateZ=-30. Кадр 50: rotateX=-30, rotateZ=0. Кадр 75: rotateX=0, rotateZ=30. Кадр 100: rotateX=30, rotateZ=0.
Подредактируем анимационные кривые. Откройте Graph Editor и нажмите «f».
Удалите «лишние» ключи на наклонных участках.
И включите отображение «бесконечности»: View=>Infinity.
Выберите обе анимационные кривые и задайте для них бесконечное циклическое повторение: Curves=>Post lnfinity=>Cycle.
Чтобы «повторы» гладко стыковались на границах, задайте «плоские» тангенсы для всех выбранных ключей: Tangents=>Flat.
Выделите слева в Graph Editor канал Rotate Z, чтобы увидеть только его анимационную кривую. Выберите первый и последний ключ на ней и выполните Tangents=>Spline, чтобы гладко состыковать начало и конец анимационной кривой.
Теперь ось юлы бегает по кругу.
Можно анимировать перемещения юлы по горизонтальной плоскости.
Для этого создадим еще один уровень иерархии для очередного «слоя» анимации. Выберите группу axis и снова группируйте ее саму с собой.
Полученную группу назовите deviation.
Заблокируйте и спрячьте все атрибуты deviation в Channel Box, за исключением translateX и translateZ.
Поставьте ключи на перемещение группы deviation.
Кадр 0: translateX=0, translateZ=0.
Кадр 50: translateX=0, translateZ=5.
Кадр 00: translateX=5, translateZ=5.
Кадр 150: translateX=5, translateZ=0.
Кадр 200: translateX=0, translateZ=0.
Отредактируем анимационные кривые.
Откройте Graph Editor и нажмите «f>>.
Выделите обе анимационные кривые и выполните Tangents=>Spline.
Чтобы сделать перемещения юлы более «жесткими», выберите два верхних ключа на кривой для translateZ, а затем выделите соседние тангенсы этих ключей.
Выполните Keys=>BreakTangents, чтобы «сломать» тангенсы и редактировать их независимо, с каждой стороны от ключа. Не забудьте включить Move Tool и потяните «сломанные» тангенсы вниз.
Выполните аналогичные действия с нижними ключами на красной анимационной кривой для translateX.
Поэкспериментируйте с ключами и различными видами интерполяции. Сохраните сцену (ula.ma).
Пытливые умы наверняка держат за пазухой едкий вопрос: зачем это городить такой «групповой огород», когда в принципе можно было бы обойтись одним объектом. Надо было бы просто задать нужный порядок поворотов (атрибут Rotate Order в Attribute Editor), а перемещения и вращения проанимировать независимо. Да, это так. Однако гораздо удобнее работать с несколькими объектами (хотя бы с точки зрения постановки ключей) и разделять анимацию на «слои». В данном примере каждая группа ответственна за определенный тип движения, и, выбрав ее, совершенно очевидно, какие атрибуты и как надо редактировать для корректировки анимации. В случае «экономии» и использования атрибутов одного объекта для общего движения, придется все время держать в голове, какие атрибуты отвечают за определенный тип анимации и переключаться в Graph Editor между «зарослями» анимационных кривых.