Решили: части тела и предметы в руках адресуются рантайм-реестром, выведенным ИЗ КОНВЕНЦИИ РИГА
(предмет = кость под Rotation Point (Grip), рука = (Left)/(Right) над ней, часть тела = кость над
Visual Part (…)). Руками объявляется только то, чего в геометрии нет: тип предмета и двуручность —
компонент UnitHeldItem на кости предмета. Свечение каста переехало с маски РОЛЕЙ на маску ЧАСТЕЙ
(PartMask), а PartRole/UnitPartRole удалены.
Почему: ручная разметка ролей (вчерашняя фаза A) назначала бы факт, который риг уже держит структурно, — то есть заводила второго владельца, расходящегося молча. Она же не решала задачу Макса: роль не умеет выбрать ОДИН из двух одинаковых кинжалов, а «иногда светится щит, иногда одно из двух оружий» — требование дизайна. Отвергнуто:
- виды юнитов по вооружению (меч+щит, два кинжала, двуручка) — комбинаторный перечень рядом с фактическим содержимым рук, тот же второй владелец;
- суффикс роли в имени кости (
Sword (Weapon)) — язык рига один, но имя узла входит в пути клипов, масок и аватара, и правится только черезRigMigrate: платить миграцией за каждый новый предмет дорого; - эвристика по имени спрайта (
Contains("shield"), как мерил риг-профиль до сегодня) — работает, пока предметов два и оба названы по-английски; факел, баклер и лук она записала бы в оружие молча.
Двуручный предмет — ОДИН UnitPart со слотом Both, а не пара записей: две записи зажгли бы свечение
дважды по одному древку и вернули бы два оружия на запрос «дай оружие».
Грабли: имя Parts у SkeletalBodyVisual было занято списком рендереров — реестр забрал его себе,
список стал Renderers (правка достала до инспектора и двух тестов). Прогон с узким EditMode-фильтром
снова отрапортовал «Some tests failed» на пустом PlayMode-ране: EditMode при этом 10/10.
Владелец правды: UnitPartRegistry.cs, RigNaming.cs (конвенция — общая для рантайма и
инструментов рига), UnitHeldItem.cs (тип предмета), тест UnitPartRegistryTests — в нём инвариант
шва: индекс части это её слот в списке рендереров тела, даже если в списке дыра от потерянной ссылки.