Решили: порядок отрисовки нельзя проверять самодельной offscreen-камерой (new GameObject + Camera + targetTexture + Camera.Render() в edit mode). Проверка делается глазами в Scene/Game view на статичном стенде из инстансов префаба вида, либо в play-mode.

Почему: заход 2026-07-30 три раза подряд выдал НЕВЕРНЫЙ вердикт именно из-за такого стенда. Offscreen-рендер показывал, что части двух юнитов перемешиваются (рука одного поверх торса другого) и что перестановка ордеров SortingGroup не меняет кадр ни на пиксель — при живом контроле в 30358 px от сдвига юнита. Из этого был сделан вывод, что SetSortingOrder из UnitView ни на что не влияет.

Проверка Максом на статичном стенде в редакторе опровергла это: сортировка корректна. Четыре пары (разная Y; одинаковая Y; замах через соседа; вплотную с клинком через торс) — юниты выходят монолитом, ближний целиком спереди, части не смешиваются. То есть схема из 2026-07-30-two-units-parts-never-interleave верна, а снятие её в 2026-07-30-sorting-claim-retracted-until-measured-in-play было вызвано негодным инструментом. Обе записи остаются как история хода; правда — здесь.

Грабли (это и есть ценность записи):

  • Offscreen Camera.Render() в edit mode не воспроизводит сортировку URP 2D. Добавление UniversalAdditionalCameraData не помогает; transparencySortMode у такой камеры при этом наследуется корректно (CustomAxis (0,1,0)), так что «камера не настроена» — ложное объяснение.
  • Открытая сцена мешает замеру молча: у начала координат в CoreScene стоит юнит, и он попадал в кадр как «третья фигура»; хелсбары влезали в кадр; Renderer.bounds по НЕАКТИВНЫМ рендерерам увели камеру в шесть раз. Стенд надо ставить далеко в стороне (x = 60) и кадрировать вручную.
  • Численный критерий «какой канал ярче» врёт на контурах и кромках. Годится только дифференциальный: меняем ОДНО и смотрим, изменился ли кадр целиком, плюс контрольный прогон, который ОБЯЗАН дать разницу.
  • Слабый тест хуже отсутствия теста: в первой версии стенда меч «дальнего» проходил выше головы ближнего и ничего не перекрывал, а выглядело как успешная проверка. Пара ставится вплотную, рука опускается, клинок ведётся через торс — иначе проверять нечего.
  • Объекты стенда с HideFlags.DontSave исчезают при domain reload (любая компиляция, запуск тестов), и стенд приходится ставить заново.

Владелец правды: этот файл (метод проверки), SpriteSortingSetupTests (структурные инварианты), Scene/Game view (фактический порядок).