Створення циклів походки та бігу персонажів ігор
Walk cycle — перша анімація, яку бачить гравець, та остання, яку хочеться переробляти за тиждень до релізу. Тим не менше переробляють. Причина майже завжди одна: цикл зроблений як завершений ролик, а не як ігровий асет, який буде працювати в Blend Tree, накладатися через Avatar Mask та переходити зі стану Idle в стан Run через Animator Controller.
Чому цикл не збігається з рухом капсули
Класична проблема: персонаж візуально ковзає по підлозі, хоча NavMeshAgent чи CharacterController рухається з нормальною швидкістю. Root Motion не підключений або підключений неправильно.
У Unity Root Motion читається з корневої кості анімації — тієї, що позначена як Root в Avatar. Якщо аніматор "вшив" переміщення в Hip-кість безпосередньо, а не в Root, Root Motion даватиме нуль. Персонаж стоятиме на місці, поки контролер тащить його куди треба.
Правильна схема: Root-кість рухається вперед суворо по осі Z на відстань одного кроку за півцикла. У кінці циклу Root повертається в початкову точку — інакше анімація не зациклюється без телепортації. У Blender це налаштовується через NLA Editor: ключові кадри Root-кості на початок та кінець циклу повинні бути ідентичні за позицією X/Y, з потрібним зміщенням по Z.
У Unity: Animator → Apply Root Motion = true, в Import Settings анімаційного клипу — Root Transform Position (XZ) = Based on Original. Швидкість руху в грі повинна збігатися зі швидкістю Root Motion — інакше ковзання повертається. Для Blend Tree з переходом Walk→Run використовуються два клипи з різними швидкостями Root Motion, а Blend Tree інтерполює між ними за параметром Speed.
Технічні вимоги до циклу як до ігрового асету
Довжина циклу в кадрах впливає на плавність переходу. Walk cycle на 30 fps: стандарт — 30 кадрів (1 секунда), ліва нога починає крок на кадрі 0, права — на кадрі 15. Цикл на 24 кадра буде рябити при переходах. На 60 кадрів — надлишковий для більшості проектів, але потрібен для мобільних ігор з низьким frame budget, де інтерполяція між кадрами анімації вимкнена.
Run cycle: 20–24 кадра на 30 fps. Більш агресивна фаза польоту (обидва контакти піднялися), виражений нахил торса вперед. Важливо: вертикальне зміщення Hip-кості повинно відповідати швидкості. Якщо персонаж біжить зі швидкістю 6 м/с, а bounce голови мінімальний — виглядає як ковзання на льоді, а не біг.
Foot IK. Walk та run cycle у більшості проектів працюють спільно з Animation Rigging або з Foot IK з Humanoid Avatar. Для коректної роботи Foot IK у основи ноги (Toe-кість) потрібен правильний вес у параметрі Avatar Left/Right Foot IK. Якщо Foot IK включений у Animator → IK Pass, і аніматор не налаштував OnAnimatorIK в скрипті, кадри будуть ігнорувати контакт з підлогою — персонаж йтиме крізь пандуси.
Blend Tree: чому один State Machine — неправильний вибір
Для локомоції State Machine з прямими переходами Walk → Run — джерело постійних проблем. Перехід через Has Exit Time з фіксованим часом 0.25s виглядає нормально на рівній поверхні та дергається при різкій зміні швидкості гравця. Blend Tree вирішує це інтерполяцією за float параметром Speed.
Мінімальна схема Blend Tree для локомоції:
- 0.0 — Idle
- 1.5 — Walk (швидкість Root Motion ~1.5 м/с)
- 5.0 — Run (швидкість Root Motion ~5.0 м/с)
- 7.0 — Sprint (опційно)
Compute Threshold → Compute from Root Motion Speed у Blend Tree автоматично встановлює пороги за швидкістю Root Motion клипу. Після цього залишається лише переконатися, що параметр Speed у Animator оновлюється через animator.SetFloat("Speed", currentSpeed) з dampTime 0.1–0.15 для згладжування.
Avatar Mask дозволяє застосувати walk/run лише до нижної частини тіла, залишаючи верхню для анімації прицілювання або взаємодії. Mask створюється в Project → Create → Avatar Mask, відключаються верхні кінцівки та голова. У Animator Controller — шарі поверх базового з призначеним Mask та Additive або Override blending.
Терміни та що входить у роботу
| Тип завдання | Орієнтовна тривалість |
|---|---|
| Walk + Run cycle без Root Motion | від 1 до 2 днів |
| Walk + Run з Root Motion та налаштуванням у Unity | від 2 до 3 днів |
| Повний пакет локомоції (idle, walk, run, sprint, strafe) | від 4 до 7 днів |
| Доповнення існуючого конвеєру (інтеграція у Blend Tree) | від 4 до 8 годин |
Аніматор працює в Maya чи Blender, експорт у FBX з параметрами під Unity. Фінальна інтеграція в Animator Controller з Blend Tree — частина завдання, якщо це прописано в ТЗ.
Вартість розраховується після уточнення кількості персонажів, вимог до Root Motion та платформи (мобайл/PC/консоль).





