Решили: новая фигура юнита ставится внутрь существующего рига — спрайты подменяются, суставы двигаются в замеренные позиции, ордера переписываются, — а не собирается рядом с нуля.

Почему: риг это не только иерархия трансформов. На нём висят 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 (конвенция имён).