Интеграция анимаций в Animator Controller Unity

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Интеграция анимаций в Animator Controller Unity
Средняя
от 1 рабочего дня до 1 недели
Часто задаваемые вопросы

Наши компетенции

Какие этапы разработки игры?

Последние работы

  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    491
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Интеграция анимаций в 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. Рассчитывается после аудита проекта.