Риггинг та анімація
Модель персонажа готова, виглядає чудово — й падає в Unity як дерев'яна лялька, тому що кості виставлені довільно та не відповідають вимогам Humanoid Avatar. Програміст намагається використовувати готовий Animator Controller з Asset Store, але змішування анімацій ломить позу, тому що root motion налаштований неправильно. Це типова ситуація, коли риггинг та анімаційний пайплайн не проектувалися під движок з самого початку.
Риггинг — це не просто "додати кості". Це проектування системи управління, яка повинна працювати всередину конкретного движка з конкретними вимогами до формату даних.
Humanoid rig pipeline у Unity: на глибину
Unity працює з двома типами ригу: Generic та Humanoid. Вибір впливає на весь анімаційний пайплайн.
Generic rig — Довільна ієрархія костей. Анімації привязані до конкретної моделі, ретаргетинг неможливий. Підходить для неперсонажної анімації (техніка, двері, істоти з нестандартною анатомією).
Humanoid rig — Unity маппіт кості на стандартну схему з 17 обов'язкових костей (позвоночник, голова, руки, ноги) та до 32 опціональних. Після цього будь-яка Humanoid-анімація застосовна до будь-якого Humanoid-персонажа. Це основа для ретаргетинга та Animator Controller з Blend Tree.
Вимоги до скелета для Humanoid
Помилки, які ломять Avatar mapping:
- Неверна орієнтація костей. Unity очікує, що вісь X спрямована по кості до дочірної кості. Якщо рука дивиться по Z або -Y — Avatar генеруватиметься з спотвореною T-pose.
- Зайві проміжні кості у ланцюжку позвоночника. Якщо між Spine та Chest стоїть проміжна кість без маппінгу — вона втрачається при ретаргетингу, анімація позвоночника виглядає негнучкою.
- Roll-кості (twist bones) — Кості для розподілу скручування передпліччя та стегна. У Humanoid їх потрібно додавати як додаткові (опціональні) кості та корректно налаштувати ваги. Без twist-костей передпліччя при повороті кисті складається некрасиво.
T-pose vs A-pose
Unity рекомендує T-pose як біндингову позу. A-pose (руки опущені під ~45°) технічно працює, але ретаргетовані анімації дають невеликі помилки в плечовому суглобі. Для персонажів з броєю або широкими плечима A-pose іноді краще — менше розтягнення при ретаргетингу. Рішення приймається на етапі риггінгу, переділка потім дорога.
Avatar Mask
Avatar Mask — інструмент для часткового застосування анімацій. Наприклад: нижня частина тіла грає анімацію бігу, верхня — анімацію стрільби. Без Avatar Mask ці стани конфліктують.
Правильна структура Animator Controller для шутера:
Base Layer (Full Body weight: 1.0)
└── Locomotion Blend Tree (idle / walk / run / sprint)
Upper Body Layer (Avatar Mask: верхня частина, weight: 1.0)
├── Idle_upper
├── Shoot
├── Reload
└── Aim_offset (2D Blend Tree по pitch/yaw)
Additive Layer (Avatar Mask: spine, weight: по параметру)
└── Lean_left / Lean_right
Additive layer для нахилу — типова оптимізація: замість 8 окремих анімацій (run_left, run_right, walk_left...) один additive lean застосовується поверх будь-якого стану.
Blend Tree для локомоції: практичний розбір
Blend Tree — система змішення анімацій по одному або двом параметрам. Для локомоції персонажа стандарт — 2D Freeform Directional з параметрами velocityX та velocityZ.
Мінімальний набір клипів для базової локомоції:
| Анімація | velocityX | velocityZ |
|---|---|---|
| Idle | 0 | 0 |
| Walk Forward | 0 | 0.5 |
| Run Forward | 0 | 1.0 |
| Walk Backward | 0 | -0.5 |
| Run Backward | 0 | -1.0 |
| Strafe Left | -0.5 | 0 |
| Strafe Right | 0.5 | 0 |
Freeform Directional інтерполює між клипами за кутом та величиною вектора швидкості. При velocity (0.35, 0.35) змішуються Walk Forward та Strafe Right з вагами, обчисленими за відстанню до кожної точки у 2D-просторі.
Root Motion vs. In-Place анімації:
-
Root Motion — Рух персонажа керується зміщенням рут-кості в анімаційному клипі. Аніматор "вшиває" швидкість руху в анімацію. Unity читає це зміщення та рухає Transform персонажа. Плюс: анімація та рух завжди синхронізовані (кроки збігаються з переміщенням). Мінус: складніше керувати швидкістю через код, вимагає коректної налаштування в Animator (
Apply Root Motion: true). - In-Place — Кість тазу залишається на місці, переміщення керується кодом (CharacterController або Rigidbody). Простіше інтегрувати у фізичну систему, але ризик рассинхронізації кроків зі швидкістю руху (ковзання ніг).
Для більшості action-ігор використовується In-Place + Foot IK через Animation Rigging пакет (Unity) для коректної постановки стопи на нерівну поверхню.
Skinning: ваги та проблемні зони
Скіннінг (привязка меша до костей через ваги) — найбільш трудомісткий етап риггінгу органічних персонажів.
Інструменти:
- Maya — Weight Paint tool + Component Editor для точної ручної правки. Smooth Skin Weights як стартова точка, потім ручна доводка проблемних зон.
- Blender — Weight Paint mode + Automatic Weights як базис. Vertex Group Editor для крапкової правки.
- 3ds Max — Skin modifier + Weight Table.
Проблемні зони та рішення:
Підпахвинні западини: стандартне рішення — артефакт "цукеркового обгортки" при підйомі руки. Вирішується додаванням corrective shape keys (blend shapes), які спрацьовують при певному куті плечового суглоба. У Maya — Pose Space Deformation (PSD), у Unity — BlendShape керований AnimationClip по IK куту.
Коліна та ліктики: потрібні строго перпендикулярні кільця edge loops (вимога до топології, яка закладається при ретопології). Twist-кості розподіляють деформацію на три суглоби (shoulder twist, elbow, forearm twist), що усуває "скручування циліндра".
Боєві анімації та стани
Боєва анімаційна система — це не просто набір клипів. Це граф стану з умовами транзишену та пріоритетами переривання.
Типова помилка: транзишн з Idle → Attack з Has Exit Time: true та Exit Time: 0.9. Це означає, що атака почнеться лише коли idle відиграє 90%. Гравець натиснув кнопку атаки та чекає 0.5 секунди. Рішення: Has Exit Time: false, транзишн по trigger, Interruption Source: Current State з пріоритетом.
Структура боєвих стану:
Any State → Hit Reaction (trigger: onHit, interrupts current)
Any State → Death (trigger: onDeath, interrupts all)
Attack Layer:
Idle → Attack1 (trigger: attack)
Attack1 → Attack2 (trigger: attack, exit time: 0.6) // combo window
Attack2 → Attack3 (trigger: attack, exit time: 0.6)
Attack1/2/3 → Idle (no trigger, exit time: 1.0)
Combo-window відкривається на ~40% довжини анімації та закривається на ~80%. Це створює почуття responsiveness без руйнування анімації.
Spine 2D для мобільних ігор
Spine — стандарт для 2D-анімації в mobile RPG, idle games, action-platformers. Меш персонажа розбивається на частини, привязані до 2D-скелета. Анімація — трансформації костей, mesh deformation через зважені вершини.
Переваги перед frame-by-frame:
- Файл анімації важить кілобайти замість мегабайт (спрайтлісти).
- Ретаргетинг: однакові анімації атаки працюють на різних персонажах з ідентичною скелетною структурою.
- Змішення анімацій та IK — ті ж концепції, що й у 3D.
Інтеграція в Unity: офіційний Spine Runtime для Unity. Компонент SkeletonAnimation керує відтворенням, SkeletonMecanim дозволяє використовувати Animator Controller поверх Spine-скелета. Для програмної анімації — прямий доступ через API: skeletonAnimation.AnimationState.SetAnimation(0, "walk", true).
DOTween часто використовується у зв'язці зі Spine для керування не-скелетними анімаціями UI-елементів, привязаних до персонажа (health bar, damage numbers) — не для самого скелета, а для синхронізації UI з ігровими подіями.
Що ми надаємо
- Риггинг персонажів під Unity Humanoid / Generic Avatar з підтримкою ретаргетинга.
- Skinning з ручною доводкою ваг у проблемних зонах, twist-кості, corrective shapes.
- Розробка Animator Controller: Blend Tree для локомоції, Avatar Mask для багатошарових систем, боєві граф стану.
- Створення анімаційних клипів: локомоція, боєві дії, реакції, синематики.
- Spine 2D риггинг та анімація для мобільних проектів, інтеграція в Unity.
- Налаштування Root Motion та Foot IK через Animation Rigging.





