← Voltar ao blog

Números de Dano Flutuantes: Aceite de Handoff e Implementação na Engine

Critérios de falha quando popups ficam borrados, perdem glifos, ordenam errado ou travam; escolha entre TMP e dígitos bitmap, pools e ordem de Canvas, passos de aceite no Unity UGUI e como a arte de dígitos do design se encaixa.

Publicado
  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • bitmap-font
  • unity
  • godot
  • cocos
  • vberai
  • 2026
Números de Dano Flutuantes: Aceite de Handoff e Implementação na Engine

Quando dez acertos acontecem em um segundo, problemas de texto flutuante raramente são resolvidos com “fonte maior”: nítido no Editor, suave no dispositivo; cor de crítico funciona mas “K” ou o sinal de menos está faltando; números ficam sobre botões do HUD e roubam toques; ou Instantiate causa picos de GC. Popups são UI de alta frequência e curta duração—aceite-os separadamente do HUD estático.

Abaixo o foco é Unity UGUI / TextMeshPro (RectTransform, Canvas, sortingOrder). Godot: Label + Theme / bitmap; Cocos: Label + bitmap font + pool—mesmos critérios e ordem de passos. Casca do HUD estático: checklist de engine + MCP. Item 3 pré-lançamento (“arte borrada / números de dano”)—reteste em dispositivos Release.

Critérios de falha (qualquer um = não passou): legibilidade prejudicada (borrão, corte, glifos ausentes); tempo de frame em combate claramente pior que a linha de base sem popup nos dispositivos-alvo; popups bloqueiam toques necessários com raycasts ainda ativos; visuais de crítico/cura/erro não correspondem à especificação orientada por dados; formatação de números inconsistente com a tabela de design (ex.: 1.2K vs 1200 misturados).

Sharp in Editor vs soft on device


Escolha primeiro: TMP ou dígitos bitmap

CenárioMelhor encaixeArmadilha típica
Dígitos + poucos símbolos (0-9 . + - %)Bitmap / malha de dígitos customizadaLacunas no charset; filtro errado → borrão
Strings localizadas completas (“Critical”, “Immune”)TMP + tabela de stringsInstabilidade de largura ao misturar com dígitos
Contorno pesado, gradiente, estilo animadoBitmap ou sequência de framesEstado ausente → fallback de cor errado
ProtótipoTMP SDF padrãoSem resolução de referência → suave no dispositivo

Se o borrão no dispositivo persistir: Canvas Scaler reference, padding/atlas do TMP, Filter Mode do bitmap (muitas vezes Point)—depois charset ou qualidade do SDF. Veja planejamento de charset de bitmap font e item 3 pré-lançamento.

Bitmap digit atlas vs TMP/SDF text


Unity: construir e aceitar (6 passos)

1. Canvas dedicado ou ordenação explícita

  • Use um Canvas dedicado (Screen Space - Camera alinhado com a câmera de combate) ou uma camada filha do HUD.
  • Defina sortingOrder acima da UI de mundo, abaixo de popups modais; raycastTarget = false nos gráficos do popup.
  • Popups de mundo: um World Canvas compartilhado—não um Canvas por número.

Popup Canvas sort above HUD, below modals, raycasts off

2. Pool de objetos

  • Pré-aqueça ≥ pico de contagem em tela (estresse de habilidades; muitas vezes 16–32 no mínimo).
  • Ao reciclar: redefina posição, alpha, escala, estado de animação, texto.
  • Sem Instantiate/Destroy por acerto.

3. Separar dados da apresentação

  • O combate emite DamagePopupEvent (valor, tipo, posição no mundo/ponto de ancoragem, flag de crítico).
  • A apresentação escolhe cor, prefixo, abreviação (K/M/B), curvas.
  • A tabela de design mapeia tipo → Prefab de estilo (Normal / Crit / Heal / Miss / Block).

4. Movimento e legibilidade

  • Típico: subir flutuando + fade + leve escala; 0,4–0,8s; escalonar ou enfileirar na mesma âncora.
  • Múltiplos acertos no mesmo frame: mesclar ou deslocar 1–2 frames para evitar sobreposição.
  • Se o tamanho segue a distância da câmera, use uma regra de escala de mundo—não misture com a escala do Canvas de UI duas vezes.

Multiple popup states with horizontal stagger

5. Charset e formatação

  • Bitmap: verifique 0-9 . , + - % x K M B e projete regras de abreviação.
  • TMP: divida campos ou sprites—não dependa de uma única string para trocar fontes.
  • Com transbordo de locale: não rasterize frases localizadas completas como arte de popup.

6. Smoke no dispositivo

  • Dev e Release: 30s de enxame de mobs, habilidade de chefe com múltiplos ticks, dispositivo com pouca RAM.
  • Compare o tempo de frame com vs sem popups; capture tela de crítico/cura/erro uma vez cada.
  • Os critérios de aprovação vivem no Prefab + configuração de pool, não apenas na Scene de teste.

Handoff de design (dígitos e estados)

EntregaUso
Arte de dígitos ou estilos TMP por estado (Normal/Crit/Heal/Miss)Prefab/Material orientado por tabela
Contorno/sombra na resolução-alvoVerificação de nitidez no dispositivo
Cor + ícone de crítico/combo nos dígitosEvite tints codificados no código
Escopo do charset (apenas dígitos vs unidades localizadas)Bitmap ou tabela de strings

Checklist de handoff de design: se os popups forem raster, especifique por locale ou não; padrão dígitos bitmap + rótulos TMP.


Roteamento de correções

SintomaCausa provávelAçãoResponsável
Suave no dispositivo, nítido no EditorScaler / SDF / filtro de bitmapAlinhe a resolução de referência; filtro Point; padding SDFEngenharia
Glifos ausentesCharset / símbolosEstenda o charset; ou TMPEngenharia + Design
Bloqueia botõesOrdenação / raycastReduza a ordem ou desative o raycastEngenharia
TravamentoSem pool / FX+texto demaisPool; mescle pops do mesmo frameEngenharia
Aparência de crítico erradaCores codificadasTipo→Prefab; estados de designEngenharia + Design
Separado do estilo do HUDDois pipelines de fonteUnifique a fonte ou o ThemeDesign + Engenharia

Perguntas frequentes

Popups precisam ser World Space?
Não. 2D fixo muitas vezes usa Screen Space - Camera; câmeras 3D livres muitas vezes usam World Canvas. Escolha um e documente.

Partículas de UI para efeito?
Ok para FX; dígitos permanecem Label/TMP/malha para locale e pooling.

Um script com lógica de dano?
Emita eventos da lógica; alternância de apresentação (ShowDamageNumbers) para testes e acessibilidade.

Números grandes?
Uma regra de formatador vinda do design; implementação única—sem copiar e colar entre scripts de UI.

Mais guias que podem interessar