Решили: AnimationEvent.functionName маркера контакта переименован "Marker""Hit" — в двадцати событиях девятнадцати клипов и во всех шести файлах кода. Константа ClipMarkers.HitFunction, методы FirstHitTime / HitCount / HitNormalized / HitNormalizedAll. Класс ClipMarkers оставлен как есть: он читает маркеры клипа вообще, и видов маркеров скоро станет больше.

Почему: пока вид маркера был один, родовое имя не мешало. Готовится разметка самого взмаха (StrikeStart / StrikeEnd — границы strike-зоны, на которой живёт слеш-дуга), и с ней «маркер» становится словом для трёх разных событий. Молчаливое равенство «маркер = контакт» превратилось бы в ловушку с ценой в геймплей: новый маркер, названный по инерции "Marker", сим засчитал бы за лишний удар — то есть за лишний расчёт урона. Отвергли вариант «оставить как есть, а новые назвать иначе»: он оставляет самое опасное имя самым безликим.

Грабли:

  • Ссылки asmdef не транзитивны. Guildmaster.AnimationLab.Editor ссылался на Guildmaster.Presentation, а тот на Guildmaster.Data — но использовать ClipMarkers из AnimationLab это не позволило. Пришлось дописать Guildmaster.Data в references прямо.
  • Переименование живёт в двух мирах сразу. Строка лежит и в коде, и в данных девятнадцати .anim; между правкой одного и другого игра сломана (удар отвязывается от тика урона). Клипы — через редактор (AnimationUtility.SetAnimationEvents), потому что правка YAML при живом Unity теряется; код — файлами мимо редактора. Проверять надо обе стороны и обязательно на диске: grep 'functionName: Marker' должен дать ноль.
  • Литерал "Marker" сидел ещё в двух генераторах (BoneUnitClipRecipes, BuildUnitViewPrefabs) и в двух тестах. Генератор, пропущенный при переименовании, вернул бы старое имя при следующей перегенерации клипов — и молча.

Владелец правды: Assets/_Project/Scripts/Data/Definitions/ClipMarkers.cs, тесты AnimationValidationTests.