Интеграция анимаций в Animator Controller Unity
Animator Controller — не просто список анимаций с переходами. Это конечный автомат, который живёт рядом с игровой логикой и при неаккуратной настройке становится источником большинства анимационных багов в проекте: дёрганые переходы, анимации застревают в неправильном состоянии, Blend Tree не синхронизируется со скоростью движения.
Архитектура Animator Controller под реальный проект
Типичная ошибка при росте проекта: всё в одном слое, все состояния в плоском списке. Работает для прототипа с пятью анимациями, ломается при тридцати. Правильная структура — несколько слоёв с явно заданными Avatar Mask и Blending Mode.
Base Layer — локомоция и idle. Все движения от корня: Blend Tree по Speed (idle → walk → run → sprint). Root Motion или In-Place — по требованиям геймплея. Этот слой работает всегда.
Upper Body Layer — атаки, прицеливание, взаимодействия. Avatar Mask: верхняя часть тела. Blending: Override. Активируется при входе в состояние атаки, не прерывает локомоцию нижней части. Важно: Weight этого слоя нужно контролировать через код (animator.SetLayerWeight(1, 1f)) при активации — иначе слой с нулевым весом игнорируется полностью.
Additive Layer — hit reactions, breathing, aim sway. Blending: Additive. Анимации в этом слое накладываются поверх всего, не заменяя. Breathing cycle с амплитудой 0.02 по оси Y на spine — незаметен напрямую, но персонаж без него выглядит статуей в idle.
Sub-State Machine используется для комбо-систем и сложных последовательностей. Группировка состояний внутри Sub-State Machine делает граф читаемым и позволяет переиспользовать одну и ту же логику переходов для нескольких персонажей.
Параметры и Transitions: как не получить дёрганые переходы
Тип параметра влияет на поведение перехода. Float с dampTime 0.1–0.15 — для всего, что связано со скоростью и плавными изменениями. Bool — для состояний (isGrounded, isAiming). Trigger — для одноразовых событий (прыжок, удар). Integer — для индексов состояний (0=idle, 1=walk), но в большинстве случаев хуже Float.
Transition настройки, которые часто оставляют дефолтными и получают проблемы:
Has Exit Time — при включении переход ждёт завершения текущей анимации. Хорошо для атак (не прерывать середину удара). Плохо для locmotion (персонаж не реагирует на кнопку мгновенно). По умолчанию включён — для большинства состояний нужно выключать.
Transition Duration — в секундах или нормализованном времени. 0.1–0.25 секунды для большинства переходов в локомоции. 0.05 или меньше для быстрых реакций (приземление, блок удара). 0 — мгновенный переход, нужен для состояний смерти и телепортации.
Interruption Source — определяет, может ли новый Trigger прервать текущий Transition. Current State — текущее состояние может вернуть управление. Next State — следующее состояние может быть прервано. Both — используется в комбо-системах с cancel window. Игнорирование этого параметра приводит к тому, что Trigger «проглатывается» в момент Transition и атака не регистрируется.
Blend Tree для локомоции: настройка под Root Motion
1D Blend Tree по Speed — стандарт для перемещения вперёд. Но strafing (движение в сторону) требует 2D Blend Tree. Тип 2D Freeform Directional даёт лучший результат для восьминаправленной локомоции: forward, backward, left, right и диагонали. Параметры: VelocityX и VelocityZ, обновляются из кода с dampTime.
Compute Thresholds → Compute from Root Motion Speed автоматически выставляет пороги из клипов. Это работает корректно только если в клипах есть Root Motion. Если используется In-Place анимация — пороги нужно выставлять вручную, иначе Blend Tree интерполирует неправильно.
Sync между слоями: если Upper Body Layer использует те же состояния, что и Base Layer (например, отдельный idle с оружием для верхней части), используется Sync чекбокс на слое. Sync копирует State Machine из базового слоя, но позволяет задать другие Motion для каждого состояния. Экономит время и не рассинхронизирует переходы.
Animation Rigging поверх Animator Controller
Animation Rigging (пакет com.unity.animation.rigging) добавляет процедурные ограничения поверх ключевой анимации. Two Bone IK для ног и рук, Multi-Aim Constraint для головы при прицеливании, Chain IK для хвостов и волос.
Rig Builder компонент добавляется на объект с Animator. Ограничения работают в порядке слоёв Rig — важно для зависимостей: сначала плечо, потом предплечье, потом кисть. Вес каждого ограничения (0.0–1.0) управляется через код или Animation Curve — удобно для плавного включения Foot IK при приземлении.
Сроки интеграции
| Масштаб задачи | Ориентировочный срок |
|---|---|
| Базовый Animator Controller (idle, walk, run) | от 4 до 8 часов |
| Многослойный контроллер с боевой системой | от 2 до 4 дней |
| Полная интеграция с Animation Rigging | от 3 до 5 дней |
| Рефакторинг существующего контроллера | от 1 до 3 дней |
Стоимость зависит от количества состояний, сложности переходов и наличия существующего кода управления Animator. Рассчитывается после аудита проекта.





