Решили: новая фигура юнита ставится внутрь существующего рига — спрайты подменяются, суставы двигаются в замеренные позиции, ордера переписываются, — а не собирается рядом с нуля.
Почему: риг это не только иерархия трансформов. На нём висят Animator, контроллер, аватар и,
главное, пути, по которым к нему привязаны клипы. Сборка с нуля даёт верную геометрию и немого
болвана: фигура правильного роста, которую нечем анимировать. Проверка после пересборки на старом
риге — все семь клипов (Idle, CombatIdle, Attack, Walk, Sprint, Block, Stun)
разрешаются с нулём битых привязок.
Грабли:
- Арт висит на два уровня ниже, чем кажется:
сустав → кость с именем части → Visual Part (кость) → спрайтовый узел. Промежуточная кость (Arm_Top,Leg_Down) — не украшение: именно её имя читает реестр частей, и именно она отделяет сустав от арта. Сборка «сустав → Visual Part → спрайт» выглядит эквивалентной и ломает и клипы, и реестр. Rotation Point (Grip)висит под костьюArm_Down, а не под локтем. Логичнее было бы под суставом, но клипы уже написаны на этот путь, и менять его можно только черезRigMigrate.- Путь в YAML клипа обрывается на пробеле при грубом чтении файла глазами или регуляркой:
.../Arm_Down/Rotationвыглядит как несуществующий узел, хотя на деле этоRotation Point (Grip). Проверять привязки надоAnimationUtility.GetCurveBindings, а не разбором текста — иначе можно объявить рассинхрон, которого нет (что я и сделала). - Кисть — единственная действительно новая кость (
Hand_Palmна существующем хвате). Всё остальное в новой фигуре ложится на готовые узлы.
Владелец правды: Assets/_Project/Prefabs/Bones/BoneUnit_Human128.prefab,
Assets/_Project/Prefabs/Bones/BoneUnit_Standart.prefab (эталон структуры),
Assets/_Project/Scripts/Presentation/Body/RigNaming.cs (конвенция имён).