Решили: порядок отрисовки частей юнита перестаёт быть константой префаба и ключуется в клипе
как m_SortingOrder отдельных SpriteRenderer. Поверх этого — глагол риг-API вида
SetDepth(part, BehindTorso | BehindHead | Front), который на кадре раскладывает кривые нужным
рендерерам: аниматор пишет один вызов, дорожки появляются сами.
Почему: Unity даёт SpriteRenderer.sortingOrder особую обработку и анимирует его, хотя свойство
целочисленное, — то есть «меч уходит за голову» это кривая с двумя ключами, а не архитектура.
Отвергнуто по пути:
SortingGroupна конечность с анимацией ордера группы — невозможно физически: группа такой обработки НЕ получила,SortingGroup.sortingOrderне анимируется. Это была первая идея, и она умерла первой.- Компонент-пресет с одним анимируемым индексом (
OnDidApplyAnimationPropertiesраскладывает ордера) — работает, но колбэк официально не документирован уже много лет. Закладывать авторинг анимаций на недокументированный колбэк ради экономии трёх дорожек — плохая сделка. Идея не выброшена: если состояний окажется мало и они станут повторяться, обёртка дешёвая. - Сортировка по Z вместо ордера — отвергнуто:
Custom Axis (0,1,0)держит сортировку юнитов между собой по Y, и трогать её ради внутренностей одного юнита нельзя. - Дубли спрайтов «спереди/сзади» с переключением видимости — надёжно, но удваивает арт на каждую часть, которая бывает и спереди, и сзади.
Сказано: «В чем проблема главная, Никси. Иногда меч должен быть “за головой”. Иногда за телом, иногда после. Какая часть левой должна быть за телом (топ, наверное?). а down - перед. И тут очень сложная система кто за чем, хихи. Как быть?» (Макс, 2026-08-01, сессия 5d740c6c). Ответ на вопрос «как быть»: внутренний порядок конечности — константа (плечо под предплечьем, предплечье под оружием, оружие под кистью), меняется только «звено перед корпусом или за ним», и у меча это один рендерер, то есть одна дорожка.
Грабли:
- Порядок нужен не «когда-нибудь», а прямо сейчас. Замер существующих клипов:
Attackподнимает плечо до 168°,Attack2до 147°,Attack3до 182°,AttackChargeдо 194° — рука заводится за голову. При нынешнем ордереSword= 2 (ниже рук 4-6 и ниже ботинок 3) меч в замахе рисуется неправильно во всех четырёх клипах. Sprintтребует порядка ног: оба бедра ходят на 72° размаха, дальняя нога пересекает ближнюю. Но ноги НЕ входят вMask_Action— переключать их порядок можно только в базовом слое.StunкрутитGripна −116° — при таком провороте оружие проходит через тело.- Ключ «Order in Layer», поставленный через инспектор, иногда сбрасывается в 0 (баг-трекер
Unity). Нас минует: клипы у нас пишутся кодом, а
SetCurve(path, typeof(SpriteRenderer), "m_SortingOrder", curve)идёт мимо инспектора. - Маски слоёв (
Mask_Action,Mask_ShieldArm) покрывают и визуальные узлы (Arm_Top,Arm_Down), поэтому дорожки на них через слои проходят — но только для тех частей, что в маске есть.
Владелец правды: BoneUnit_Standart.prefab (базовые ордера частей),
Assets/_Project/Scripts/Presentation/Body/SkeletalBodyVisual.cs (раскладка списка частей в
sortingOrder и ордер группы по Y), клипы в Assets/_Project/Prefabs/Bones/*.anim.