Решили: раскладка слоёв (Base → Action → ActionHips → Block) держится в ДВУХ контроллерах скелета,
и править надо оба: BoneUnit_Standart — лабораторный, его носит голый риг BoneUnit_Standart.prefab;
BoneUnit_Combat — боевой, его носит UnitView_BoneStandart, то есть то, что играет в игре.
Почему: контроллеров у скелета два, оба лежат в Prefabs/Bones, имена похожи, и по имени живой не
угадывается: «Standart» звучит как основной, а в бою стоит «Combat». Вся сегодняшняя работа со слоями
сначала легла в лабораторный — то есть в игре не изменилось бы ничего, и понять это по гизмо было бы
невозможно, потому что гизмо сэмплит клипы напрямую и контроллер ему безразличен.
Вылезло случайно: замер точки удара пошёл через префаб ВИДА, и там нашлись два аниматора —
выключенный Visual Sprites/Body с покадровым UnitBase и живой Visual Sprites/BoneVisual с
BoneUnit_Combat.
Грабли: маска у обоих контроллеров ОДНА (общий guid). Переименование Mask_Arms → Mask_Action
вместе с расширением её состава (были только руки, стали руки + торс + голова) молча изменило смысл
слоя Arms и в боевом контроллере — притом что правился лабораторный. В игре это не проявилось лишь
потому, что вес слоя 0 и код его пока не трогает. Общий ассет между «песочницей» и «боем» означает, что
правка песочницы способна поменять бой, ничего об этом не сказав.
Второе: искать риг в префабе вида через GetComponentInChildren<Animator> НЕЛЬЗЯ — первым найдётся
выключенный покадровый. Отсюда же и NullReferenceException в замере: под тем аниматором был ровно
один спрайт и ни щита, ни меча.
Владелец правды: BoneUnit_Combat.controller (боевая раскладка), BoneUnit_Standart.controller
(лабораторная), UnitView_BoneStandart.prefab (какой из них живой — видно по нему).