Траектория «Геймдев» · линия B · конспект 8 из 8 · финал траектории

Персонаж из Blender в Unity

О чём эта тема
Последний шаг конвейера: гуманоидный скелет, совместимый с Unity, чистый экспорт в FBX, настройка аватара Mecanim — и управление анимациями персонажа из C#-кода.
Аннотация
Конспект замыкает обе линии траектории. Сначала — зачем движкам гуманоидная система: переиспользование чужих анимаций на своих персонажах любых пропорций. Затем — требования Unity к скелету: пятнадцать обязательных костей, именование сторон и зеркальная симметрия. Разбирается чистый экспорт в FBX с сохраняемым пресетом настроек и импорт в Unity: тип рига Humanoid, привязка костей к аватару, диапазоны «мышц». Персонаж оживает через Animator Controller — и оказывается, что это старая знакомая машина состояний из A02, только визуальная; управление ею из C#-кода завершает круг. Интерактивный симулятор контроллера позволяет подвигать параметры и триггеры руками.
Пререквизиты
B07 — арматура, скиннинг, автовеса; A07A08 — скрипты и SerializeField; A02 и A11 — машины состояний: Animator Controller — одна из них.
Мотивация
Анимировать бег, прыжок, удар и смерть самому — недели работы даже для опытного аниматора. Но если скелет персонажа совместим с гуманоидной системой Unity, к нему подходят чужие анимации: из Asset Store, с Mixamo, из любых наборов — как одежда стандартного размера. Час на правильный скелет и экспорт экономит недели анимации; этим часом конспект и займётся.

1. Зачем нужна гуманоидная система

Раньше анимация была привязана к конкретному скелету: чтобы два персонажа делили один набор движений, их скелеты — и, значит, рост и пропорции — должны были совпадать полностью. Современные движки решили проблему прослойкой: в Unity она называется Mecanim. Анимация больше не двигает кости напрямую — движок считывает её значения и применяет к каждому персонажу через его аватар (Avatar) — описание того, какая кость скелета какой «роли» соответствует. Персонаж может быть карликом или великаном с мультяшными пропорциями — пока в его скелете есть нужные роли, любая гуманоидная анимация ляжет на него корректно. Работает это как кукловод: одни и те же движения рук кукловода — разные куклы.

2. Скелет, который поймёт Unity

Строится скелет инструментами B07 (арматура, экструзия цепочек, автовеса), но состав костей не произвольный: гуманоидному аватару Unity нужно минимум 15 костей:

КостьРоль
Hipsтаз — корневая кость всей иерархии
LowerSpine, Chestнижняя и верхняя части позвоночника
Neck, Headшея и голова
UpperArm.L / .Rдва плеча
LowerArm.L / .Rдва предплечья
Hand.L / .Rдве кисти
UpperLeg.L / .Rдва бедра
LowerLeg.L / .Rдве голени

Рабочие привычки, которые сильно экономят время:

Типичная ошибка Статьи и видео о риггинге под Unity, записанные в Blender до версии 2.8 (наш первоисточник — как раз такой): там выделение правой кнопкой и другое расположение меню. Клавиши и порядок действий из B07 актуальны; из старых материалов берите состав костей и логику, а не конкретные кнопки.

3. Чистый экспорт в FBX

Unity умеет открывать и .blend напрямую, но это требует установленного Blender на каждой машине; переносимый путь — FBX: File → Export → FBX. Настройки экспорта по умолчанию тащат в файл всё подряд, включая камеры и источники света, поэтому для Unity их приводят в порядок:

Чтобы не повторять настройку при каждом экспорте, сохраните её пресетом: кнопка «+» рядом с Operator Presets, имя вроде «Unity FBX» — и весь набор восстанавливается одним выбором из списка.

4. Импорт и аватар

В Unity модель кладётся в папку Models; дальше — инспектор импорта, вкладка Rig: Animation Type → Humanoid → Apply. После повторного импорта появляется кнопка Configure… — режим привязки костей к системе Mecanim.

В этом режиме зелёным подсвечены кости, которые видит Unity, а в инспекторе — схема человека с кругами-слотами: сплошные круги обязательны, пунктирные — дополнительные для сложных ригов. Если обязательный слот не нашёл свою кость, он краснеет — и анимировать персонажа не выйдет, пока иерархия не исправлена. Здесь же, во вкладке Muscles & Settings, задаются диапазоны «мышц» — предельные углы каждого сустава: подвигав ползунок предпросмотра, легко заметить, что рука проходит сквозь тело, и поджать минимальный угол так, чтобы наложение исчезло. Apply → Done — аватар готов.

Типичная ошибка Красные слоты в Configure при верном на вид скелете. Почти всегда это иерархия: кость не является потомком нужной (нога не привязана к тазу — родительство из B07), либо в цепочке не хватает звена из таблицы раздела 2. Чинится в Blender, затем переэкспорт — править прямо в Unity не нужно.

Предмет в руку персонажа добавляется без анимации: объект (меч, цилиндр — что угодно) делается дочерним к кости кисти в иерархии — иначе он останется висеть в пространстве, игнорируя движения руки. Родительство работает и здесь — как в A05 и B07.

5. Animator: машина состояний анимаций

Персонаж в сцене оживает через Animator Controller: Create → Animation Controller, двойной щелчок открывает окно Animator, и первая же перетащенная туда анимация (например, Idle) становится состоянием по умолчанию. Контроллер назначается персонажу в поле Controller компонента Animator — нажмите Play, и персонаж дышит в ожидании.

Присмотритесь к окну Animator: прямоугольники-состояния, стрелки-переходы, условия на стрелках. Это в точности машина состояний из A02 и A11 — только собранная мышью, а не switch-ом. Переходами управляют параметры контроллера: числа (Float), флаги (Bool) и одноразовые триггеры; условия вида «Speed больше 0.1» переключают Idle на ходьбу, триггер Attack запускает удар, по завершении которого анимация сама возвращается в движение.

Тренажёр · симулятор Animator Controller

Три состояния и человечек, который их отыгрывает. Двигайте параметр Speed — контроллер сам переключит Idle и Walk по условиям на стрелках; кнопка SetTrigger("Attack") запускает удар, после которого автомат вернётся в состояние по Speed. Ровно этим и управляет C#-код ниже.

IdleSpeed < 0.1
WalkSpeed ≥ 0.1
Attackпо триггеру · 0.8 с

Из кода параметрами управляет компонент Animator. Скрипт движения персонажа сообщает контроллеру скорость и команды — и больше ничего не знает об анимациях:

using UnityEngine;

[RequireComponent(typeof(Animator))]
public class CharacterAnimation : MonoBehaviour
{
    private Animator animator;

    // имена параметров лучше кэшировать в хеши — без опечаток и лишних строк
    private static readonly int SpeedParam  = Animator.StringToHash("Speed");
    private static readonly int AttackParam = Animator.StringToHash("Attack");

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // скорость из ввода: стрелки/WASD дают значение от 0 до 1
        float speed = new Vector2(
            Input.GetAxis("Horizontal"),
            Input.GetAxis("Vertical")).magnitude;

        animator.SetFloat(SpeedParam, speed);   // контроллер сам выберет Idle или Walk

        if (Input.GetKeyDown(KeyCode.Space))
        {
            animator.SetTrigger(AttackParam);   // одноразовый запуск удара
        }
    }
}

На этом кольцо траектории замкнулось: дизайн-документ описал персонажа (A01), машина состояний задала его поведение (A02, A11), Blender дал ему тело и движения (B03–B07), а Animator и десяток строк C# соединили всё в игре. Дальше — ваш проект.

Контрольные вопросы

Источники

  1. Создание персонажей в Blender и Unity // Хабр : [сайт]. — URL: https://habr.com/ru/articles/422255/ (дата обращения: 08.07.2026).
  2. Humanoid Avatars // Unity Documentation : [сайт]. — URL: https://docs.unity3d.com/Manual/AvatarCreationandSetup.html (дата обращения: 08.07.2026).
  3. Animator Controller // Unity Documentation : [сайт]. — URL: https://docs.unity3d.com/Manual/class-AnimatorController.html (дата обращения: 08.07.2026).
  4. Mixamo : библиотека персонажей и анимаций : [сайт]. — URL: https://www.mixamo.com (дата обращения: 08.07.2026).