El flujo de puntuación y movimientos puede ser simple y eficiente si se aprovechan propiedades con getter y setter sobre un patrón Singleton. Con este enfoque, la UI reacciona sin depender de un update continuo, algo clave en juegos móviles: menos consumo y cambios inmediatos en pantalla.
¿Por qué usar un singleton en el manager de interfaz?
El objetivo es tener un único Graphical User Interface Manager que centralice cambios de score y move counter. Así, cualquier script puede invocar la shared instance y actualizar la interfaz al instante.
Evitar update en móvil: no es nuestro mejor amigo para redibujar continuamente. Mejor propiedades reactivas.
Propiedades con efecto: cada setter actualiza textos y estados sin lógica adicional.
Instancia única: previene duplicados y estados inconsistentes en escena.
¿Cómo se implementa la shared instance del GUI manager?
Crear una variable private static del mismo tipo que la clase y exponerla como pública para acceso global.
En start: si no existe, asignar this; si existe, hacer destroy del segundo game object.
¿Qué ventaja tienen getters y setters frente a update en móvil?
Menos coste: se actualiza solo cuando cambian los datos.
Menos código disperso: una sola fuente de verdad controla la UI.
Reactividad inmediata: cambios en score y move counter se reflejan al instante.
¿Cómo se actualizan movimientos y puntuación en tiempo real?
La interacción del usuario y la caída de piezas marcan los dos puntos de actualización: decrementar movimientos al ejecutar un swipe válido y aumentar puntos cuando caen caramelos en la corrutina del tablero.
¿Dónde decrementar move counter con can swipe?
Dentro del bloque if (canSwipe): se intercambian caramelos, se comprueban matches y se deselecciona el caramelo.
Justo ahí, invocar a la shared instance y hacer -- del contador.
// Dentro de Candy (o el script que gestiona el input)if(canSwipe){// Intercambio, comprobación de matches, etc. GraphicalUserInterfaceManager.sharedInstance.MoveCounter--;}
¿Dónde incrementar score en la corrutina del board manager?
En la corrutina que reposiciona caramelos: tras cada espera, un caramelo cae y se reubica.
Ese es un buen momento para sumar puntos fijos, por ejemplo, 10 por ciclo.
// Dentro de la corrutina del BoardManager// Valor de ejemplo para una caída ágil: 0.02f–0.05f.yieldreturnnewWaitForSeconds(0.02f);GraphicalUserInterfaceManager.sharedInstance.Score +=10;
¿Qué detalles operativos conviene recordar?
Acceso público: si la shared instance es privada, no aparecerá al autocompletar.
Orden de guardado: guardar scripts y volver a probar tras cada cambio.
Valores de espera: tiempos pequeños aceleran pruebas sin perder claridad visual.
¿Qué comportamiento de juego observamos y qué retos propone el instructor?
El resultado confirma la lógica: la puntuación arranca en cero, los movimientos en treinta, y cada acción válida modifica la UI. Además, se distinguen casos con y sin match.
¿Qué resultados en pantalla confirman la lógica?
Primer movimiento: movimientos bajan a veintinueve; puntos suben a treinta.
Caídas encadenadas: rebotes múltiples elevan rápidamente la puntuación, por ejemplo hasta ciento cincuenta.
Movimientos potentes: un solo movimiento con cuatro piezas puede sumar cuarenta puntos.
¿Qué pasa con movimientos sin match?
Movimientos: se decrementan igualmente en una unidad.
Puntuación: permanece sin cambios si no hay tres en línea.
Nota de diseño: en el original de Candy Crush, el movimiento sin match se revierte; aquí se permite y solo resta un movimiento.
¿Qué retos finales puedes implementar?
Pantalla de game over: lanzar al llegar a cero movimientos y evitar negativos.
Resumen de partida: mostrar puntuación final y estadísticas relevantes.
Máximas puntuaciones y ranking: almacenar y ordenar resultados para incentivar la rejugabilidad.
¿Tienes dudas o quieres compartir tu implementación del Singleton y las propiedades reactivas? Comenta tus avances y propuestas de mejoras.