Решили: надголовный UI и боевые цифры держат постоянный ЭКРАННЫЙ размер при любом зуме боевой
ортокамеры (дизайн-решение 2026-07-31/69). Формула одна на всех — orthographicSize / reference —
и живёт в ConstantScreenScale.ZoomFactor. Бары получают её компонентом на контейнере UnitView/UI,
цифры — вызовом изнутри FloatingText.
Почему: камера ортографическая, у неё экранный размер ∝ 1/orthographicSize, поэтому компенсация
сводится к одному мультипликативному множителю: он гасит зум и при этом сохраняет связь с масштабом
юнита и родителя (в отличие от «выставить абсолютный scale», который эту связь рвёт).
Две развилки и почему выбрано так:
- Компонент на контейнер
UI, а не на сами бары. УHealthBarView/ManaBarViewlocalScaleзанят 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 постоянно» —
он живёт между тремя файлами и вторым потребителем формулы).