Una implementación sólida de recolección de monedas en Unity une tres piezas: la moneda, el Game Manager y la interfaz HUD. Aquí verás cómo comunicar objetos recolectables con el contador global y cómo reflejarlo en pantalla a 60 FPS, con código C# claro y buenas prácticas de prefabs y diseño de niveles.
¿Cómo se conectan moneda, game manager y hud?
Para que el flujo sea consistente, cada pieza asume una responsabilidad concreta con un hilo conductor simple: recolectar, contar y mostrar.
La moneda se recolecta al detectar el evento de colisión con el jugador usando OnTriggerEnter2D. Se oculta con un método tipo hide y marca su estado como recogida.
Un switch evalúa el tipo del objeto recolectable (CollectableType). Solo en el caso Money se notifica al Game Manager con un método dedicado.
El Game Manager incrementa el contador global usando el valor del objeto (collectable.value).
La Game View actualiza el número de monedas en pantalla a 60 FPS, reflejando cambios en tiempo real.
Ejemplo de la variable pública y el método en el Game Manager:
publicclassGameManager:MonoBehaviour{publicstaticGameManager SharedInstance;// patrón de acceso compartido.publicint collectedObjects =0;// empieza en 0.publicvoidCollectObject(Collectable collectable){ collectedObjects += collectable.value;// se incrementa con "+=".}}
Conexión desde la interfaz para pintar el conteo:
// En la GameView (HUD):coins = GameManager.SharedInstance.collectedObjects;
¿Qué hace collect object y por qué usar +=?
El método CollectObject encapsula la lógica de contar: recibe un recolectable y suma su valor al total. La sintaxis "+=" es clave para escribir código más claro y breve.
Con "+=": increments en una línea, legible y directa.
Sin "+=": tendrías que escribir collectedObjects = collectedObjects + collectable.value, más largo y propenso a errores.
Cada recolectable define su value; por ejemplo, una moneda vale 1.
Llamada desde la moneda usando un switch por tipo:
publicvoidCollect(){switch(collectableType){case CollectableType.Money: GameManager.SharedInstance.CollectObject(this);break;case CollectableType.HealthPotion:// lógica futura para poción de vida.break;case CollectableType.ManaPotion:// lógica futura para poción de maná.break;}}
Claves prácticas que fortalecen tu implementación:
El evento del jugador dispara la recolección: OnTriggerEnter2D inicia el flujo.
La moneda se oculta tras recolectarse para feedback inmediato.
Solo Money comunica al Game Manager; otros tipos tendrán su lógica específica.
La Game View repinta el contador de monedas a 60 FPS para una experiencia fluida.
¿Cómo depurar, usar prefabs y diseñar niveles con monedas?
Más allá del código, la estabilidad depende de buenos hábitos de edición, pruebas y diseño.
¿Cómo evitar errores por cambios sin guardar?
Si ves un circulito en la pestaña del script, hay cambios sin guardar.
Guarda antes de probar para no confundir la lógica con fallos de guardado.
Si el contador no sube y la moneda se destruye: revisa que el valor (value) de la moneda esté configurado y que el switch llame a CollectObject en Money.
¿Cómo validar el contador con pruebas rápidas?
Duplica la moneda dos o tres veces para verificar sumas consecutivas.
Observa que el contador pase de 0 a 1, 2, 3 tras cada colisión.
Usa atajos para velocidad: Ctrl + D en Windows o Cmd + D en Mac (D de duplicar).
¿Cómo aplicar cambios en prefabs y organizar la escena?
Después de ajustar posición, rotación, tipo y valor del recolectable, aplica los cambios al prefab desde el menú correspondiente.
Mantén el prefab padre en posición 0,0,0 por defecto. Facilita su colocación en niveles.
Al trabajar con un level block, aplica sus cambios al prefab padre y resetea la instancia visual usada para editar.
¿Cómo guiar al jugador con diseño de monedas?
Crea rutas de monedas que indiquen dirección y ritmo de movimiento.
Alterna alturas para sugerir saltos y caídas seguras.
Puedes jugar con “monedas trampa” para provocar decisiones arriesgadas. Úsalas con mesura para no frustrar.
Habilidades y conceptos reforzados en este flujo:
Comunicación entre componentes: moneda → Game Manager → HUD.
Eventos de física 2D: OnTriggerEnter2D para iniciar la recolección.
Contadores y acumuladores: uso de "+=" para sumar valores.
Lectura de estados con switch por tipo de recolectable.
Render en interfaz: actualización a 60 FPS en la Game View.
Gestión de prefabs: aplicar cambios y mantener origen en 0,0,0.
Productividad en editor: duplicación rápida con Ctrl/Cmd + D.
Game design básico: rutas de monedas y señales visuales.
¿Te animas a mostrar tu propuesta? Comparte un screenshot de tu diseño de niveles y cuántas monedas logras recolectar sin morir. Si te atreves con monedas trampa, cuéntanos dónde las pusiste y qué buscabas provocar en el jugador.