Решили: затемнение главного меню собирается тремя слоями (общий scrim → вуаль под колонкой →
зерно ткани), вуаль затухает по smoothstep с параметром плато, а ЧИСЛА вида подбираются в живом
play-mode правкой панели через execute_code, не перезаходами.
Почему: слоёв три, потому что у них разные задачи — общий гасит движение боя во всём кадре,
вуаль держит контраст колонки, фактура возвращает поверхности материал. Общий scrim берёт токен
--gm-color-scrim (чёрный 0.42), а не свой: заведённый было --gm-color-menu-scrim (табак 0.18-0.30)
прожил вечер и умер о факт — табак светлее чёрного, и та же цифра приглушает кадр почти вдвое слабее.
Роль, отличающаяся от общей только тем, что работает хуже, права на жизнь не имеет.
Затухание сменило форму дважды. Квадрат (было) чинит только дальний конец кривой, ближний оставляя с изломом; с непустым плато этот излом садится ровно на стык и читается кромкой невидимой панели. У smoothstep производная нулевая с обеих сторон — ни начало спада, ни конец не видны. Плато нужно потому, что альфа задаёт потолок У КРОМКИ, а не под текстом: титул кончается на 42% экрана и при ширине вуали 50% лежал в 2% плотности — поднимай альфу хоть до единицы, под словом не изменится ничего. Ширина и плато оказались главными ручками, альфа — третьей.
Сказано: «А нельзя ли никак править “в моменте”, чтобы сразу смотреть правки и не выходить из плей мода?» (05.08.2026). И раньше в том же заходе: «Да нет общего приглушения вообще!», «Затемнение слева СЛИШКОМ сильное и резкое».
Грабли:
-
Меш, намотанный против часовой, UI-рендерер отбрасывает молча.
EdgeVeilродился накануне (c45b53795) и не нарисовал ни пикселя — при этом элемент существовал, имел размер 960×1080, получал цвет из токена, иresolvedStyleбодро всё показывал. Ни ошибки, ни предупреждения. Нашлось замером пикселей кадра: профиль по горизонтали оказался идеально плоским там, где обязан был падать. Диагностика, которая это вскрыла, — покрасить элемент НЕПРОЗРАЧНЫМ цветом инлайном: виден ⇒ рендер жив, дело в меше. Ось Y в UITK растёт вниз, «по часовой» = левый-верх → правый-верх → правый-низ, и у вертикальной раскладки порядок другой. Рядом жила вторая мина: дляRight/Bottomось пускалась назад, что переворачивало намотку вторично — эти стороны не работали бы и после починки. -
Пока идёт play, Unity ассеты не переимпортирует вообще.
refresh_unityотвечает успехом, USS в живую панель не приезжает. Отсюда доклад «готово, смотри» отправил Макса на старую картинку, и вечер ушёл на цикл выход-вход-выход. ПроверятьEditorApplication.isPlayingПЕРЕД тем, как звать смотреть. -
Штатный UI Toolkit Live Reload у нас глушится выключенным Auto Refresh. Для рантайма он включён по умолчанию (меню ⋮ Game view) и умеет подхватывать USS/UXML на лету, но ему нужно, чтобы Unity заметил правку файла. Включать Auto Refresh насовсем нельзя — вернётся переимпорт на каждое касание; на сессию подбора UI можно, с гашением после.
Инварианта в тест здесь не вынести: «меш виден» проверяется только рендером кадра, а не сборкой. Поэтому цена ошибки платится вниманием — готча продублирована в скилл и память.
Владелец правды: Assets/_Project/Scripts/UI/Components/EdgeVeil.cs (намотка, smoothstep, плато),
Assets/_Project/UI/Theme/components.uss (.gm-mainmenu, .gm-mainmenu__veil,
.gm-mainmenu__texture), Assets/_Project/UI/Theme/tokens.semantic.uss (--gm-color-menu-shade),
скилл xgaida-x-nixi-uitk (раздел «Числа подбираются в живом play», готча про меш в
references/component-model.md).