Налаштування анімаційних контролерів у рушіях ігор
Animator Controller в Unity – це не просто граф переходів. Для VR-персонажа з повним набором локомоції, інтерактивних реакцій та процедурних IK-шарів це складна машина станів з кількома шарами, Blend Trees, Sub-State Machines, Avatar Masks та синхронізованими параметрами. Без правильного проектування з самого початку – рефакторинг Controller при 30+ станах перетворюється на nightmareю.
Чому "простий" граф ломається при масштабуванні
Початківці роблять один Animator з десятками станів та прямими переходами. Працює для прототипу. При додаванні 10-го персонажа з подібною, але дещо іншою логікою – Controller дублюється та редагується вручну. Баги розползаються.
Правильний підхід – ієрархія через Animator Override Controller. Base Controller містить структуру: шари, параметри, всі переходи. Для кожного конкретного NPC створюється AnimatorOverrideController, який заміняє тільки Animation Clips, зберігаючи всю логіку. Це дозволяє мінювати анімації NPC без торкання графа переходів.
Sub-State Machines – обов'язкова практика для VR-NPC. Стани розбиваються за логічними групами: Locomotion, Combat, Interaction, Dialogue. Перехід між групами – простий, всередині групи – складний з умовами. Це візуально читаємо та дебаггується.
Шарова архітектура для VR-персонажів
Для NPC у VR типова структура Animator включає:
Layer 0: Base (Locomotion). Вага 1. Керує нижньою половиною тіла: Blend Tree з параметрами Speed (float) та Direction (float). Чотири швидкості – стоп, ходьба, біг – як мінімум. Avatar Mask: тільки ноги та таз.
Layer 1: Upper Body. Вага 1, режим Additive або Override. Жести, діалогові анімації, реакції. Avatar Mask: торс та вище. Переходи триггерні – через SetTrigger("Gesture_Wave"). Exit Time = 0 на переходах з gesture → idle, щоб не чекати конця анімації при перериванні.
Layer 2: IK Overrides. Вага 0–1 керується кодом. Тут TwoBoneIK Constraint для прицільювання рукою, Look At для взгляду. У VR особливо важливо: NPC має дивитися на гравця, стежачи його через Animator.SetLookAtPosition() з lookAtWeight близько 0.7 (не 1.0 – інакше шия вигибається як у совы).
Blend Tree vs. State Machine: коли що вибирати
Blend Tree підходить для неперервних параметрів: швидкість ходьби, напрямок стрейфу, нахил туловища. State Machine – для дискретних станів: живий/мертвий, ранений/здоровий, standing/crouching.
Помилка: використовувати State Machine для локомоції з умовою Speed > 0.5 → Walk. При значенні 0.49 персонаж різко переключається замість плавного смішення. Blend Tree на тому ж параметрі дає правильний crossfade.
Переходи в State Machine для VR: Has Exit Time = false для реакцій на события (не чекаємо конця поточної анімації), Transition Duration = 0.1–0.2 секунди стандартно, для combat-реакцій = 0.05.
Відладка Controller в VR-проекті
Animator Debugger у Unity показує поточні ваги та параметри в Play Mode. Для VR важливо запускати відладку через Editor з підключеною гарнітурою у Link-режимі – поведінка Controller у headset може відрізнятися через Fixed Timestep та різний framerate. Використовуємо Animator.logWarnings = true в dev-білдах.
Терміни: налаштування базового Controller для одного персонажа – 1–3 робочих дні; повна архітектура з Override Controllers та шаровою структурою для проекту з 5–10 NPC-типами – 1–2 тижні. Вартість розраховується індивідуально.





