Решили: надголовный UI и боевые цифры держат постоянный ЭКРАННЫЙ размер при любом зуме боевой ортокамеры (дизайн-решение 2026-07-31/69). Формула одна на всех — orthographicSize / reference — и живёт в ConstantScreenScale.ZoomFactor. Бары получают её компонентом на контейнере UnitView/UI, цифры — вызовом изнутри FloatingText.

Почему: камера ортографическая, у неё экранный размер ∝ 1/orthographicSize, поэтому компенсация сводится к одному мультипликативному множителю: он гасит зум и при этом сохраняет связь с масштабом юнита и родителя (в отличие от «выставить абсолютный scale», который эту связь рвёт).

Две развилки и почему выбрано так:

  • Компонент на контейнер UI, а не на сами бары. У HealthBarView / ManaBarView localScale занят punch-анимацией; второй писатель дрался бы за поле каждый кадр. Контейнер свободен.
  • Цифрам компонент НЕ вешаем — множитель применяется изнутри FloatingText. Там localScale пишется каждый кадр поп-масштабом (EaseOutBack), и LateUpdate компонента затирал бы поп. Заодно тем же множителем домножена вся кинематика цифры — высота всплытия, боковой разлёт, гравитация дуги: иначе на дальнем зуме крупная цифра почти не двигалась бы, а вблизи улетала бы за экран.

_referenceOrthographicSize — не общий факт, а калибровка «при каком зуме объект виден в свой авторский размер», поэтому у каждого потребителя своё поле; сейчас у обоих 5 (текущий размер боевой камеры).

Грабли: manage_prefabs с components_to_add / component_properties разворачивается на валидации входа (список и словарь приезжают строкой) — префаб пришлось править через execute_code + LoadPrefabContents / SaveAsPrefabAsset. Побочный эффект такого пересохранения: Unity переписывает файл целиком по текущей сериализации, и в дифф UnitView.prefab заодно приехали чужие миграции (снятое поле _attackClip → новое _poseBlendSeconds: 0.13, служебный m_WasSpriteAssigned: 1 → 0).

Владелец правды: ConstantScreenScale.cs, FloatingText.cs, тест ConstantScreenScaleTests (держит инвариант «произведение масштаба на 1/orthoSize постоянно» — он живёт между тремя файлами и вторым потребителем формулы).