Corrige bugs de UI antes de añadir más features

Resumen

Antes de seguir creando interfaces en Unity, conviene detenerse a revisar bugs y ajustes pendientes. Esta pausa para resolver deuda técnica evita que tu proceso de desarrollo se vuelva más complicado con cada nueva feature que apilas sobre código sin pulir.

¿Por qué pausar el desarrollo para resolver deuda técnica?

Seguir agregando features sobre problemas sin resolver acumula fricción. Cuando das play a tu proyecto y ves que la pantalla de Game Over aparece apenas inicias el nivel, esa es una señal clara de que algo en tu configuración de UI está roto y hay que atenderlo ya.

¿Qué es la deuda técnica? Es el costo acumulado de seguir construyendo sobre código mal configurado o con errores. Mientras más tardas en arreglarlo, más caro sale resolverlo después.

¿Cómo configurar correctamente las pantallas de UI por estado de juego?

Cada pantalla en Unity debe tener asignado el estado en el que se vuelve visible. Si tu pantalla de Game Over aparece desde el inicio, lo más probable es que su Visible State esté mal configurado.

  • UI Start Screen debe mostrarse en Idle.
  • UI Level Selection debe mostrarse en Level Selection.
  • UI Game Over debe mostrarse en Game Over, no en In Game.

Revisa el componente UI Screen en cada pantalla y asegúrate de que el estado coincida con su propósito.

¿Cómo cambiar de Hide On State a Show On State en Unity?

Un problema común aparece con los objetos animados que solo se ocultan en un estado específico, pero deberían mostrarse únicamente en uno y ocultarse en todos los demás. La lógica original de Hide On State hace lo contrario de lo que necesitas.

¿Qué cambios hacer en el script?

En tu script de Hide Object on Game State, renombra la variable a Show On State. Luego, dentro de la función Start y de Game State Updated, reemplaza el bloque if/else por una sola línea que asigne directamente el resultado booleano a target.active.

csharp target.SetActive(showOnState == currentGameState);

Esta línea evalúa si el estado actual coincide con el estado configurado. Si coincide, el objeto se muestra. Si no, se oculta. Limpia, directa y reutilizable en ambas funciones.

¿Cómo aplicar Show On State a los elementos del menú?

En el objeto Hide Objects, configura Show On State en Idle para que los elementos animados solo se vean en la pantalla de inicio. Al dar play, esos elementos desaparecen al entrar a la selección de niveles y al gameplay, justo como debe ser.

¿Cómo ocultar el contador de puntos fuera del gameplay?

Los puntos seguían visibles en pantallas donde no deberían aparecer. La solución es reutilizar el mismo script ya creado.

En el objeto UI Points, agrega el componente Hide Object on Game State, asigna UI Points como objeto a controlar y configura el Show On State en In Game. Con eso, el contador solo aparece mientras juegas y desaparece en el menú o en la selección de niveles.

¿Cuándo debo crear un script reutilizable en Unity? Cuando notas que la misma lógica aplica a varios objetos. En lugar de duplicar código, un componente parametrizable te ahorra mantenimiento futuro.

¿Cómo dar soporte a múltiples resoluciones con Canvas Scaler?

Si diseñaste tu interfaz pensando solo en iPhone 12 Pro Max, al cambiar a iPhone SE o iPad Pro vas a ver cómo todo se descuadra. La solución vive dentro del Canvas Scaler.

¿Qué configuración usar en Canvas Scaler?

Cambia el UI Scale Mode de Constant Pixel Size a Scale with Screen Size. Después define una resolución de referencia: 1080 x 1920 funciona bien como base HD por defecto, aunque puedes ajustar esos valores según los assets de tu proyecto.

Con esa configuración, la interfaz escala proporcionalmente al tamaño de pantalla. Probado en iPhone SE, iPhone 11 e iPad Pro, todo se mantiene en su lugar.

¿Por qué no aparecen las resoluciones de iOS en Unity?

Las resoluciones tipo iPhone solo aparecen si tu proyecto está configurado para iOS en File > Build Settings. Si tu plataforma destino es otra, esas opciones no van a estar disponibles en el menú de resoluciones del editor.

¿Qué problemas resolviste tú durante el desarrollo?

Con la casa en orden, ya puedes continuar creando interfaces para tu juego sin arrastrar bugs viejos. ¿Te apareció algún otro problema mientras seguías la clase y cómo lo solucionaste? Déjalo en los comentarios.