Монтаж анимационных клипов в таймлайне игр
Unity Timeline — это не просто «кинематик для катсцен». Это инструмент оркестровки, который синхронизирует анимации, аудио, активацию объектов, Cinemachine камеры и кастомные сигналы в единую последовательность с точностью до кадра. Когда это настроено правильно, вся катсцена или геймплейный ивент управляется одним PlayableDirector'ом. Когда сделано наспех — получается хаотичный набор Coroutines, разбросанных по пяти скриптам, которые рассинхронизируются при изменении FPS или при пропуске кадра.
Анимационные треки и binding
Каждый анимационный трек в Timeline привязан к конкретному Animator через Output binding. Это первое место, где возникают проблемы при переиспользовании Timeline Asset'а между разными персонажами: binding'и хранятся в PlayableDirector компоненте, а не в самом .playable файле. Это значит, что один Timeline Asset можно переиспользовать с разными персонажами через director.SetGenericBinding(track, newAnimator) — удобно для диалоговых систем, где одна и та же катсценная структура воспроизводится с разными NPC.
Clip'ы на анимационном треке управляются двумя параметрами: Ease In/Out и Clip Transform. Ease In/Out — это blend от нейтральной позы к анимации, контролирует, как клип «появляется». Но нейтральная поза — это не T-pose и не idle, это последняя поза, которую Animator имел до начала Timeline. Если персонаж в idle стоит с опущенными руками, а катсцена начинается с рукой у лица — без правильного Ease In будет жёсткий pop.
Решение: создать короткий transition clip (0.5–1 секунда), который начинается от idle позы и плавно выводит в первую позу катсцены. Этот клип ставится первым на треке с минимальным Ease In. Затем overlap с основным действием. Так переход работает независимо от того, из какого состояния персонаж пришёл.
Blending клипов и override vs additive mode
По умолчанию каждый анимационный трек — override mode: он полностью контролирует весь Animator. Для катсцен с несколькими одновременными слоями (тело идёт, голова поворачивается, рука жестикулирует) правильная архитектура — несколько треков с разными Layer Weight'ами, или один трек с анимациями, покрывающими нужные кости через Avatar Mask.
Avatar Mask на анимационном треке Timeline ограничивает, какие кости этот трек контролирует. Это эквивалент Animator Layer Mask, но на уровне Timeline клипа. Паттерн: трек 1 (Full Body mask) — locomotion или idle. Трек 2 (Upper Body mask) — жест или gesture. Трек 3 (Head mask) — look-at или реакция. Blend между ними управляется Track Weight.
Проблема возникает, когда два трека с overlapping масками конкурируют за одну кость. Timeline использует override blending по умолчанию — последний трек побеждает. Если нужно additive blending (сложить трансформы), Track Mode нужно переключить на Override с Additive Clip. Это не очевидно в UI — настройка находится в контекстном меню трека, не в инспекторе клипа.
Signal Track и синхронизация с геймплейной логикой
Signal Track — один из самых недооценённых инструментов Timeline. Это механизм для отправки событий из временной шкалы в игровую логику без прямой зависимости. Signal Emitter на временной шкале → Signal Asset (ScriptableObject) → Signal Receiver на GameObject с подписанным методом.
Применение: включить hitbox на конкретном кадре атаки в катсцене, запустить particle system в момент взрыва, переключить AI state после завершения диалоговой анимации. Без Signal Track всё это делается через Animation Events на клипах или через Coroutine с WaitForSeconds — оба метода ломаются при изменении тайминга анимации.
Важный момент: Signal Emitter срабатывает только при нормальном воспроизведении (не при scrubbing в Editor). Для debug нужно либо вручную вызывать signal receiver, либо использовать Retroactive флаг на Emitter (срабатывает, если Timeline seekнули за точку сигнала).
Cinemachine интеграция и монтаж камеры
Cinemachine Track в Timeline — это монтажный стол для игровых камер. Каждый clip на треке — одна виртуальная камера (CinemachineVirtualCamera). Blend между камерами управляется Ease In/Out длиной overlap'а.
Стандартная проблема: при переходе между камерами с разными Look At target'ами Cinemachine пытается interpolate между двумя разными точками прицеливания, что создаёт нежелательное «плавание» камеры в кадре перехода. Фикс — Blend Hint: Override Lookat On Blend = true на второй камере, или ручной control через CinemachineBrain.m_DefaultBlend.
| Масштаб задачи | Срок |
|---|---|
| Короткая катсцена (10–30 секунд, 2–3 персонажа) | 2–5 дней |
| Диалоговая система на Timeline (5–10 диалогов) | 1–2 недели |
| Полноценная игровая кат-сцена (60–120 секунд) | 1–3 недели |
| Ревизия и рефакторинг существующего Timeline | 1–3 дня |
Стоимость определяется после изучения текущей структуры проекта и списка необходимых последовательностей.





