← К блогу

Всплывающие числа урона: приёмка передачи и реализация в движке

Критерии провала: размытые попапы, пропущенные глифы, неверная сортировка, фризы; выбор TMP или битмап-цифр, пулы и порядок Canvas, приёмка в Unity UGUI и подключение арта цифр.

Опубликовано
  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • bitmap-font
  • unity
  • godot
  • cocos
  • vberai
  • 2026
Всплывающие числа урона: приёмка передачи и реализация в движке

Когда за одну секунду прилетает десять ударов, проблемы с всплывающим текстом редко решаются «шрифтом побольше»: резко в Editor, размыто на устройстве; цвет крита работает, но пропала «K» или минус; числа сидят на кнопках HUD и перехватывают тапы; или Instantiate даёт всплески GC. Попапы — это высокочастотный, короткоживущий UI — принимайте их отдельно от статичного HUD.

Ниже — про Unity UGUI / TextMeshPro (RectTransform, Canvas, sortingOrder). Godot: Label + Theme / bitmap; Cocos: Label + bitmap font + pool — критерии и порядок шагов те же. Статичная оболочка HUD: чек-лист движка + MCP. Пункт 3 перед релизом («размытый арт / числа урона») — перепроверяйте на устройствах в Release.

Критерии провала (любой один = не пройдено): страдает читаемость (размытие, обрезка, пропущенные глифы); время кадра в бою заметно хуже базовой линии без попапов на целевых устройствах; попапы блокируют нужные тапы, когда raycast всё ещё включён; визуал крита/лечения/промаха не совпадает со спецификацией на основе данных; форматирование чисел не согласовано с дизайн-таблицей (например, 1.2K и 1200 вперемешку).


Сначала выберите: TMP или битмап-цифры

СценарийЧто лучше подходитТипичная ловушка
Цифры + немного символов (0-9 . + - %)Битмап / кастомный меш цифрПробелы в наборе символов; неверный фильтр → размытие
Полные локализованные строки («Critical», «Immune»)TMP + таблица строкДрожание ширины при смешивании с цифрами
Тяжёлая обводка, градиент, анимированный стильБитмап или покадровая последовательностьНет состояния → неверный фолбэк цвета
ПрототипСтандартный TMP SDFНет reference resolution → размыто на устройстве

Если размытие на устройстве сохраняется: Canvas Scaler reference, padding/атлас TMP, Filter Mode битмапа (часто Point) — и только потом качество набора символов или SDF. См. планирование набора символов битмап-шрифта и пункт 3 перед релизом.

Sharp in Editor vs soft on device

Bitmap digit atlas vs TMP/SDF text


Unity: сборка и приёмка (6 шагов)

1. Отдельный Canvas или явная сортировка

  • Используйте отдельный Canvas (Screen Space - Camera, выровненный по боевой камере) или дочерний слой HUD.
  • Задайте sortingOrder выше world UI, ниже модальных попапов; raycastTarget = false на графике попапа.
  • Мировые попапы: один общий World Canvas — не по одному Canvas на число.

Popup Canvas sort above HUD, below modals, raycasts off

2. Пул объектов

  • Прогрейте не меньше пикового числа на экране (стресс от скиллов; часто минимум 16–32).
  • При возврате в пул: сбросьте позицию, альфу, масштаб, состояние анимации, текст.
  • Никаких Instantiate/Destroy на каждый удар.

3. Отделите данные от представления

  • Бой испускает DamagePopupEvent (значение, тип, мировая позиция/точка привязки, флаг крита).
  • Представление выбирает цвет, префикс, сокращение (K/M/B), кривые.
  • Дизайн-таблица сопоставляет тип → Prefab стиля (Normal / Crit / Heal / Miss / Block).

4. Движение и читаемость

  • Обычно: всплытие вверх + затухание + лёгкий масштаб; 0.4–0.8 с; смещение или очередь на одном якоре.
  • Мультиудар в одном кадре: объединяйте или смещайте на 1–2 кадра, чтобы избежать наложения.
  • Если размер зависит от дистанции до камеры, используйте одно правило мирового масштаба — не смешивайте с масштабом UI Canvas дважды.

Multiple popup states with horizontal stagger

5. Набор символов и форматирование

  • Битмап: проверьте 0-9 . , + - % x K M B и правила сокращений проекта.
  • TMP: разделяйте поля или спрайты — не полагайтесь на одну строку для переключения шрифтов.
  • С переполнением при локализации: не растрируйте целые локализованные предложения как арт попапа.

6. Проверка на устройстве

  • Dev и Release: 30 с роя мобов, мультитиковый скилл босса, устройство с малым объёмом RAM.
  • Сравните время кадра с попапами и без; сделайте по одному скриншоту крита/лечения/промаха.
  • Критерии прохождения живут в Prefab + конфиге пула, а не только в тестовой Scene.

Передача от дизайна (цифры и состояния)

ПоставкаИспользование
Арт цифр или стили TMP по состояниям (Normal/Crit/Heal/Miss)Prefab/Material на основе таблицы
Обводка/тень в целевом разрешенииПроверка резкости на устройстве
Цвет + иконка крита/комбо на цифрахИзбегайте захардкоженных оттенков в коде
Область набора символов (только цифры или локализованные единицы)Битмап или таблица строк

Чек-лист передачи дизайна: если попапы растровые, укажите по локалям или нет; по умолчанию битмап-цифры + метки TMP.


Маршрутизация исправлений

СимптомВероятная причинаДействиеОтветственный
Размыто на устройстве, резко в EditorScaler / SDF / фильтр битмапаСогласуйте reference res; фильтр Point; padding SDFИнженер
Пропущены глифыНабор символов / символыРасширьте набор; или TMPИнженер + Дизайн
Блокирует кнопкиСортировка / raycastПонизьте order или отключите raycastИнженер
ФризыНет пула / слишком много FX+текстаПул; объединение попапов одного кадраИнженер
Неверный вид критаЗахардкоженные цветаТип→Prefab; состояния от дизайнаИнженер + Дизайн
Расхождение со стилем HUDДва шрифтовых пайплайнаУнифицируйте источник шрифта или ThemeДизайн + Инженер

Часто задаваемые вопросы

Попапы обязательно в World Space?
Нет. Фиксированный 2D часто использует Screen Space - Camera; свободные 3D-камеры часто используют World Canvas. Выберите одно и задокументируйте.

UI-частицы для эффектности?
Нормально для FX; цифры остаются Label/TMP/мешем ради локализации и пулинга.

Один скрипт с логикой урона?
Испускайте события из логики; переключатель представления (ShowDamageNumbers) для тестов и доступности.

Большие числа?
Одно правило форматтера от дизайна; единственная реализация — без копипаста по UI-скриптам.

Другие статьи, которые могут вам понравиться

Переполнение локалей в игровом UI: запас в дизайне и QA экспорта перевода VberAI Studio

Как не допустить поломки кнопок и списков из-за немецкого или испанского текста, заложить ширину в дизайн и сравнить локали на холсте VberAI Studio до полного повторного экспорта.

  • game-ui-design
  • game-dev-ai
  • ui-localization
  • i18n
Читать