Решили: 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.