Решили: тинт тела отдаётся как есть, White включительно (ResolveBodyTint() => _tint), и ставится
ТОЛЬКО юнитам, которые делят спрайт с кем-то ещё; у владельца своего арта и у оригинала внутри группы тинт
остаётся White. Полноту правила держит UnitTintPolicyTests.
Почему: в резолвере стоял дев-фолбэк «White = не задан → оттенок от хеша имени», и он красил восемь юнитов
из семнадцати цветом, который никто не выбирал: огненный мечник получал hue 147 — зелёный, «стандартная»
болванка 126 — тоже зелёный. Хеш имени не знает ни цвета арта, ни того, делит ли юнит спрайт, то есть отвечал
на вопрос, которого не задавали. Отвергли починку «подобрать хорошие цвета всем» и оставить фолбэк: цвет тела
— авторское решение, а фолбэк по определению отбирает его у автора и делает невидимым в инспекторе. Второй
довод фактический: каталог визуалов уже читал сырое Tint, а бой и карточка — резолвер, так что «единый
источник цвета» существовал только на словах.
Грабли: тинт УМНОЖАЕТСЯ на готовый цветной арт, поэтому перекрасить им персонажа физически нельзя, и
половина странных цветов была именно попыткой это сделать. Друид красился зелёным поверх красного воина
(Medieval Warrior 2) — на выходе бурая грязь; древень — зелёным поверх синего рыцаря (Medieval Warrior 3).
Умножение умеет только затемнять и глушить, так что повторкам ставим приглушающий сдвиг, а настоящая
перекраска — работа Palette Remapper или своего арта. Вторая: делящие арт группы не видны ни из SO, ни из
префаба по отдельности — спрайт назначается в ПРЕФАБЕ (у трёх юнитов вообще наследуется от базового
UnitView.prefab), цвет живёт в SO, и ни одна сторона шва не видит вторую. Отсюда правило в тесте, а не в
комментарии.
Владелец правды: Assets/_Project/Scripts/Data/Definitions/UnitData.cs (ResolveBodyTint), тест
Assets/_Project/Tests/EditMode/Content/UnitTintPolicyTests.cs.