← Volver al blog

Números de Daño Flotantes: Aceptación de Entrega e Implementación en Motor

Criterios de fallo cuando los popups se ven borrosos, pierden glifos, ordenan mal o tartamudean; elegir TMP vs dígitos bitmap, pools y orden de Canvas, pasos de aceptación en Unity UGUI, y cómo encaja el arte de dígitos de diseño.

Publicado
  • game-ui-design
  • game-dev-ai
  • ui-to-engine
  • bitmap-font
  • unity
  • godot
  • cocos
  • vberai
  • 2026
Números de Daño Flotantes: Aceptación de Entrega e Implementación en Motor

Cuando diez impactos caen en un segundo, los problemas de texto flotante rara vez se arreglan con “fuente más grande”: nítido en el Editor, suave en el dispositivo; el color de crítico funciona pero falta la “K” o el signo menos; los números se posan sobre botones del HUD y roban toques; o Instantiate genera picos de GC. Los popups son UI de alta frecuencia y corta vida—acéptalos por separado del HUD estático.

A continuación se enfoca en Unity UGUI / TextMeshPro (RectTransform, Canvas, sortingOrder). Godot: Label + Theme / bitmap; Cocos: Label + bitmap font + pool—mismos criterios y orden de pasos. Shell del HUD estático: checklist de motor + MCP. Ítem 3 pre-lanzamiento (“arte borroso / números de daño”)—reprobar en dispositivos Release.

Criterios de fallo (cualquiera = no aprobado): legibilidad afectada (borrosidad, recorte, glifos faltantes); tiempo de frame de combate claramente peor que la línea base sin popups en dispositivos objetivo; los popups bloquean toques requeridos con raycasts aún activos; los visuales de crítico/curación/fallo no coinciden con la especificación basada en datos; formato de números inconsistente con la tabla de diseño (p. ej. 1.2K vs 1200 mezclados).


Elegir primero: TMP o dígitos bitmap

EscenarioMejor opciónTrampa típica
Dígitos + pocos símbolos (0-9 . + - %)Bitmap / malla de dígitos personalizadaHuecos en el charset; filtro incorrecto → borrosidad
Cadenas localizadas completas (“Critical”, “Immune”)TMP + tabla de cadenasInestabilidad de ancho al mezclar con dígitos
Contorno pesado, degradado, estilo animadoBitmap o secuencia de framesEstado faltante → fallback de color incorrecto
PrototipoTMP SDF por defectoSin resolución de referencia → suave en dispositivo

Si la borrosidad en dispositivo persiste: referencia del Canvas Scaler, padding/atlas de TMP, Filter Mode del bitmap (a menudo Point)—luego charset o calidad SDF. Ver planificación de charset de bitmap font y ítem 3 pre-lanzamiento.

Sharp in Editor vs soft on device

Bitmap digit atlas vs TMP/SDF text


Unity: construir y aceptar (6 pasos)

1. Canvas dedicado o orden explícito

  • Usa un Canvas dedicado (Screen Space - Camera alineado con la cámara de combate) o una capa hija del HUD.
  • Configura sortingOrder por encima de la UI de mundo, por debajo de popups modales; raycastTarget = false en los gráficos del popup.
  • Popups de mundo: un World Canvas compartido—no un Canvas por número.

Popup Canvas sort above HUD, below modals, raycasts off

2. Pool de objetos

  • Precalienta ≥ el conteo máximo en pantalla (estrés por habilidades; a menudo 16–32 mínimo).
  • Al reciclar: reinicia posición, alfa, escala, estado de animación, texto.
  • Sin Instantiate/Destroy por impacto.

3. Separar datos de presentación

  • El combate emite DamagePopupEvent (valor, tipo, posición de mundo/punto de anclaje, flag de crítico).
  • La presentación elige color, prefijo, abreviatura (K/M/B), curvas.
  • La tabla de diseño mapea tipo → Prefab de estilo (Normal / Crit / Heal / Miss / Block).

4. Movimiento y legibilidad

  • Típico: flotar hacia arriba + desvanecer + ligera escala; 0.4–0.8s; escalonar o encolar en el mismo anclaje.
  • Múltiples impactos en el mismo frame: fusionar o desfasar 1–2 frames para evitar solapamiento.
  • Si el tamaño sigue la distancia de cámara, usa una regla de escala de mundo—no mezcles con la escala del Canvas de UI dos veces.

Multiple popup states with horizontal stagger

5. Charset y formato

  • Bitmap: verifica 0-9 . , + - % x K M B y proyecta reglas de abreviatura.
  • TMP: divide campos o sprites—no dependas de una sola cadena para cambiar fuentes.
  • Con desbordamiento de locale: no rasterices oraciones localizadas completas como arte de popup.

6. Prueba en dispositivo

  • Dev y Release: enjambre de mobs de 30s, habilidad de jefe multi-tick, dispositivo de baja RAM.
  • Compara tiempo de frame con vs sin popups; captura de pantalla de crítico/curación/fallo una vez cada uno.
  • Los criterios de aprobación viven en Prefab + configuración de pool, no solo en la Escena de prueba.

Entrega de diseño (dígitos y estados)

EntregaUso
Arte de dígitos o estilos TMP por estado (Normal/Crit/Heal/Miss)Prefab/Material guiado por tabla
Contorno/sombra a resolución objetivoVerificación de nitidez en dispositivo
Color + icono de crítico/combo en dígitosEvitar tintes codificados en el código
Alcance del charset (solo dígitos vs unidades localizadas)Bitmap o tabla de cadenas

Checklist de entrega de diseño: si los popups son raster, especifica por locale o no; por defecto dígitos bitmap + etiquetas TMP.


Enrutamiento de correcciones

SíntomaCausa probableAcciónResponsable
Suave en dispositivo, nítido en EditorScaler / SDF / filtro bitmapAlinear resolución de referencia; filtro Point; padding SDFIngeniería
Glifos faltantesCharset / símbolosExtender charset; o TMPIngeniería + Diseño
Bloquea botonesOrden / raycastBajar orden o desactivar raycastIngeniería
TartamudeoSin pool / demasiados FX+textoPool; fusionar pops del mismo frameIngeniería
Aspecto de crítico incorrectoColores codificadosTipo→Prefab; estados de diseñoIngeniería + Diseño
Separado del estilo del HUDDos pipelines de fuentesUnificar fuente o ThemeDiseño + Ingeniería

Preguntas frecuentes

¿Los popups deben ser World Space?
No. La 2D fija a menudo usa Screen Space - Camera; las cámaras 3D libres a menudo usan World Canvas. Elige uno y documéntalo.

¿Partículas de UI para el estilo?
Bien para FX; los dígitos se quedan como Label/TMP/malla por locale y pooling.

¿Un script con la lógica de daño?
Emite eventos desde la lógica; toggle de presentación (ShowDamageNumbers) para pruebas y accesibilidad.

¿Números grandes?
Una regla de formateo del diseño; implementación única—sin copiar y pegar entre scripts de UI.

Más guías que te pueden interesar