Персонаж из Blender в Unity
- О чём эта тема
- Последний шаг конвейера: гуманоидный скелет, совместимый с Unity, чистый экспорт в FBX, настройка аватара Mecanim — и управление анимациями персонажа из C#-кода.
- Аннотация
- Конспект замыкает обе линии траектории. Сначала — зачем движкам гуманоидная система: переиспользование чужих анимаций на своих персонажах любых пропорций. Затем — требования Unity к скелету: пятнадцать обязательных костей, именование сторон и зеркальная симметрия. Разбирается чистый экспорт в FBX с сохраняемым пресетом настроек и импорт в Unity: тип рига Humanoid, привязка костей к аватару, диапазоны «мышц». Персонаж оживает через Animator Controller — и оказывается, что это старая знакомая машина состояний из A02, только визуальная; управление ею из C#-кода завершает круг. Интерактивный симулятор контроллера позволяет подвигать параметры и триггеры руками.
- Пререквизиты
- B07 — арматура, скиннинг, автовеса; A07–A08 — скрипты и 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 | две голени |
Рабочие привычки, которые сильно экономят время:
- Именование сторон: суффиксы .L и .R в именах костей — не украшение: по ним работает зеркалирование, а Unity распознаёт стороны при привязке.
- Симметрия: строится только левая половина скелета, затем выбранные кости зеркалируются командой Symmetrize — правая половина с корректными именами .R достраивается сама.
- Локоть и колено ставятся точно на точку сгиба меша, иначе конечность будет гнуться «не там»; проверять удобно в каркасном режиме.
- Стопы экструдируются из голени в виде сбоку — не забудьте про них, зеркалирование стоп тоже касается.
3. Чистый экспорт в FBX
Unity умеет открывать и .blend напрямую, но это требует установленного Blender на каждой машине; переносимый путь — FBX: File → Export → FBX. Настройки экспорта по умолчанию тащат в файл всё подряд, включая камеры и источники света, поэтому для Unity их приводят в порядок:
- в списке типов объектов оставить только Armature и Mesh (камеры, лампы и прочее — снять);
- включить Apply Transform — позиции, повороты и масштабы «вожмутся» в геометрию, и модель придёт в Unity без сюрпризов с ориентацией;
- во вкладке Armatures включить Only Deform Bones и выключить Add Leaf Bones: вспомогательные кости управления нужны только внутри редактора, а листовые кости — только для совместимости с другими пакетами; в движке и те и другие — мусор.
Чтобы не повторять настройку при каждом экспорте, сохраните её пресетом: кнопка «+» рядом с Operator Presets, имя вроде «Unity FBX» — и весь набор восстанавливается одним выбором из списка.
4. Импорт и аватар
В Unity модель кладётся в папку Models; дальше — инспектор импорта, вкладка Rig: Animation Type → Humanoid → Apply. После повторного импорта появляется кнопка Configure… — режим привязки костей к системе Mecanim.
В этом режиме зелёным подсвечены кости, которые видит Unity, а в инспекторе — схема человека с кругами-слотами: сплошные круги обязательны, пунктирные — дополнительные для сложных ригов. Если обязательный слот не нашёл свою кость, он краснеет — и анимировать персонажа не выйдет, пока иерархия не исправлена. Здесь же, во вкладке Muscles & Settings, задаются диапазоны «мышц» — предельные углы каждого сустава: подвигав ползунок предпросмотра, легко заметить, что рука проходит сквозь тело, и поджать минимальный угол так, чтобы наложение исчезло. Apply → Done — аватар готов.
Предмет в руку персонажа добавляется без анимации: объект (меч, цилиндр — что угодно) делается дочерним к кости кисти в иерархии — иначе он останется висеть в пространстве, игнорируя движения руки. Родительство работает и здесь — как в 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 запускает удар, по завершении которого анимация сама возвращается в движение.
Три состояния и человечек, который их отыгрывает. Двигайте параметр Speed — контроллер сам переключит Idle и Walk по условиям на стрелках; кнопка SetTrigger("Attack") запускает удар, после которого автомат вернётся в состояние по Speed. Ровно этим и управляет C#-код ниже.
Из кода параметрами управляет компонент 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# соединили всё в игре. Дальше — ваш проект.
Контрольные вопросы
-
Переиспользование анимаций между персонажами разных пропорций: анимация не двигает кости напрямую — движок применяет её значения через Avatar, описание соответствия костей скелета стандартным «ролям». Поэтому чужие гуманоидные анимации (Asset Store, Mixamo) подходят вашему персонажу.
-
Пятнадцать: таз (корень), две кости позвоночника, шея, голова, по два плеча, предплечья, кисти, бедра и голени. Дополнительные кости допустимы, но эти — обязательны.
-
По ним работает зеркалирование (Symmetrize строит правую половину скелета из левой с автоматической заменой суффикса) и распознавание сторон при привязке аватара в Unity.
-
Экспортировать только Armature и Mesh (без камер и ламп); Apply Transform — вжать трансформации; Only Deform Bones и выключенный Add Leaf Bones — без служебных костей. Набор сохраняется пресетом Operator Presets.
-
Обязательная кость не найдена: нет звена из минимального набора или нарушена иерархия родительства. Чинится в Blender (родительство, состав костей) с последующим переэкспортом, а не в Unity.
-
Сделать объект меча дочерним к кости кисти в иерархии персонажа. Без родительства предмет останется висеть в пространстве, игнорируя анимацию руки.
-
Это она и есть: состояния-анимации, переходы-стрелки, условия на переходах. Код через компонент Animator задаёт параметры — SetFloat("Speed", …), SetBool, SetTrigger("Attack") — а контроллер сам выполняет переходы по условиям.
Источники
- Создание персонажей в Blender и Unity // Хабр : [сайт]. — URL: https://habr.com/ru/articles/422255/ (дата обращения: 08.07.2026).
- Humanoid Avatars // Unity Documentation : [сайт]. — URL: https://docs.unity3d.com/Manual/AvatarCreationandSetup.html (дата обращения: 08.07.2026).
- Animator Controller // Unity Documentation : [сайт]. — URL: https://docs.unity3d.com/Manual/class-AnimatorController.html (дата обращения: 08.07.2026).
- Mixamo : библиотека персонажей и анимаций : [сайт]. — URL: https://www.mixamo.com (дата обращения: 08.07.2026).