Leonardo Gutierrez
Genial
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.
¿Cómo se implementa la shared instance del GUI manager?
private static del mismo tipo que la clase y exponerla como pública para acceso global.this; si existe, hacer destroy del segundo game object.public class GraphicalUserInterfaceManager : MonoBehaviour { public static GraphicalUserInterfaceManager sharedInstance; // debe ser pública. private int _moveCounter; private int _score; [SerializeField] private Text movesText; [SerializeField] private Text scoreText; void Start() { if (sharedInstance == null) sharedInstance = this; else Destroy(this.gameObject); } public int MoveCounter { get => _moveCounter; set { _moveCounter = value; UpdateMovesUI(); } } public int Score { get => _score; set { _score = value; UpdateScoreUI(); } } void UpdateMovesUI() => movesText.text = _moveCounter.ToString(); void UpdateScoreUI() => scoreText.text = _score.ToString(); }
¿Qué ventaja tienen getters y setters frente a update en móvil?
¿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?
if (canSwipe): se intercambian caramelos, se comprueban matches y se deselecciona el caramelo.-- 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?
// Dentro de la corrutina del BoardManager // Valor de ejemplo para una caída ágil: 0.02f–0.05f. yield return new WaitForSeconds(0.02f); GraphicalUserInterfaceManager.sharedInstance.Score += 10;
¿Qué detalles operativos conviene recordar?
¿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?
¿Qué pasa con movimientos sin match?
¿Qué retos finales puedes implementar?
¿Tienes dudas o quieres compartir tu implementación del Singleton y las propiedades reactivas? Comenta tus avances y propuestas de mejoras.
Leonardo Gutierrez
Genial