Решили: свинг уехал с базового слоя на слой Action (маска: торс, голова, обе руки) плюс аддитивный ActionHips для дельты таза. База остаётся тем, чем юнит занят ногами, и при ударе с разбега продолжает Sprint. Вес слоя входит мгновенно и уходит за 0.12 с. Признак «свинг с разбега» фиксируется на ВХОДЕ в цикл и живёт до его конца, а не перечитывается каждый кадр.

Почему: пока атака занимала базу, «бей на бегу» было выбором из двух неправильных — клип атаки (ноги замирали посреди разбега) или клип бега (удара не видно). Слой снимает выбор целиком, и та же надстройка обслужит будущего кайтящего стрелка, ради которого её и просили сделать общей, а не проводкой одного чарджа.

Аддитивный таз, а не часть маски действия: замер 30.07 показал, что Override ставит таз в −0.022 и стирает качание бега, тогда как аддитив даёт 0.038 − 0.037 = 0.001 — дельта удара ложится ПОВЕРХ качания. Вход веса мгновенный намеренно, несимметрично уходу: кадр контакта привязан к сим-тику, и плавный въезд смазал бы начало замаха, а уходить руке некуда торопиться.

Формула скраба осталась ОДНА на оба дома (слой и база покадровых). Второй экземпляр разъехался бы с первым молча и только у половины бестиария — искалось бы это глазами по всему бою.

Грабли: три места обходят обычный ход анимации, и каждое пришлось учить слою отдельно — финишер (держит кадр контакта), удержание кадра у остальных и конец боя. Хуже всех финишер: он спрашивал «в атаке ли юнит» у БАЗОВОГО состояния, а со слоем база в этот момент показывает ноги — проверка молча отняла бы кадр контакта ровно у того, ради кого финишер играется. Теперь спрашивает у фазы.

Отдельно: клип смерти забирает тело целиком и слой надо гасить, а стоп-кадру («застыть там, где достали») — наоборот, нельзя: поза удара там обязана остаться.

Не сделано: CombatIdle показ по-прежнему не выбирает — признака взять неоткуда, пока сим не расщепит AttackPhase.Idle на «вне лупа» и «боевое ожидание». Поэтому между редкими ударами рука уходит в отдых и поднимается заново.

Владелец правды: UnitView (DriveActionLayer, DriveSwingScrub, SwingIsOverlay), тест BoneUnitLayerStackTests — он один сторожит, что имена слоёв в коде и в контроллерах совпадают.