Juego disponible para ejecutarse vía Web
https://play.unity.com/en/games/f7d7055f-2a01-4ec2-8f4e-2cfeea9b8930/pec-3-un-juego-de-artilleria-web
Video de demostración
https://youtu.be/LgyFEGwgP58
https://youtu.be/toyiSGqOQQ4 (Android)
Cómo se juega
El juego recrea las mecánicas fundamentales del Super Mario Bros original:
- Movimiento: Flechas de dirección. Para correr, dejar pulsado la tecla CTRL.
- Salto: Tecla
ESPACIO. El salto es variable; cuanto más tiempo pulses, más alto saltará Mario.
- Disparo: Tecla ALT (Izquierdo) o tecla X. Solo disponible cuando Mario está en estado de Fuego.
- Interacción con tuberías: * Para entrar en la tubería vertical, sitúate sobre ella y pulsa la Flecha Abajo.
- Para salir de la zona subterránea, camina hacia la derecha en dirección a la tubería horizontal para realizar la transición automática de salida.
- Interacción con bloques: Golpea bloques con el cabezazo. Los bloques con interrogación sueltan monedas o ítems, mientras que los bloques ocultos solo se revelan al ser golpeados. Algunos bloques actúan como Puntos de Guardado.
- Enemigos: Derrota a los Goombas saltando sobre ellos. Un contacto lateral dañará a Mario.
- Sistema de Puntuación: El jugador acumula puntos mediante diversas acciones:
- Recoger monedas: Suma puntos y aumenta el contador de la interfaz.
- Eliminar enemigos: Derrotar Goombas otorga puntos adicionales.
- Destruir bloques: Los bloques de ladrillo rompibles también contribuyen a la puntuación.
- Bonificación por tiempo: Al finalizar el nivel, el tiempo restante se convierte automáticamente en puntos extra.
- Final de nivel: Al tocar el poste de la bandera, Mario entrará automáticamente al castillo y el nivel se reiniciará tras sonar la música de victoria.
Compatible con Android desde la web
- Para jugar en un dispositivo Android, se utilizan las flechas y botones abajo. Para que el juego se vea como debe en Android, se deberá de pulsar el botón FULL SCREEN y poner el teléfono en posición horizontal.
Compatible con Android
- Se ha probado la APK y funciona a pantalla completa de forma horizontal automáticamente.
Cómo se ha desarrollado
El proyecto se ha estructurado buscando la máxima modularidad y fidelidad al juego original, destacando los siguientes hitos técnicos:
1. Física y Movimiento (MarioMovement.cs)
Se ha implementado un sistema de Gravedad Dinámica que permite que Mario caiga más rápido de lo que sube, evitando el efecto de «gravedad lunar» de Unity. Además, se incluyó Coyote Time para mejorar la respuesta del control. Para asegurar un movimiento lateral fluido y evitar que el personaje se quede «pegado» a las paredes o plataformas al colisionar, se ha asignado un Physics Material 2D «Slippery» con fricción cero al Rigidbody de Mario, enemigos y seta.
2. Sistemas de Partículas (Nuevo)
Se han desarrollado dos sistemas de partículas personalizados:
- Efecto de Humo: Integrado en el script de movimiento, se activa solo al correr y estar en suelo. Utiliza Simulation Space: World para dejar un rastro realista que se desvanece suavemente.
- Destrucción de Ladrillos: Sustituye al antiguo sistema de piezas manuales. Al impactar, el bloque instancia un prefab de partículas que simula escombros con rotación y gravedad aleatoria, optimizando el rendimiento al usar un solo objeto en lugar de varios prefabs individuales.
3. Sistema de Bloques (QuestionBlock.cs)
Se diseñó un sistema de bloques versátil que permite configurar desde el inspector si un bloque contiene monedas o Power-ups. La característica más destacada es la propiedad isHidden, que permite crear bloques totalmente invisibles que se materializan solo al recibir un impacto, desactivando el Animator para mostrar el sprite de bloque agotado.
4. Sistema Checkpoints (Savepoint.cs)
- Activación por Impacto: Ciertos bloques están configurados con el script
Savepoint.cs. Al golpearlos con la cabeza, se guarda la posición actual de Mario y el estado del juego en el GameManager.
- Persistencia en la Reaparición: Si Mario muere, el
GameManager posiciona al jugador en el último checkpoint activado, gestionando también la transición de cámara si el punto de guardado se encuentra en el subsuelo.
5. Interfaz de Usuario y Textos Flotantes (GameManager.cs y FloatingText.cs)
Se ha desarrollado un HUD (Heads-Up Display) completo en el Canvas que gestiona la persistencia de datos (puntos, monedas y tiempo). Se implementó un sistema de Feedback Visual mediante el script FloatingText: cada vez que Mario gana puntos (al pisar un enemigo, tocar la bandera, etc), se instancia un prefab de texto en la posición de la acción que flota hacia arriba y se autodestruye. El contador de monedas incluye un icono de una moneda.
6. IA de Enemigos y Sensores (GoombaPatrol.cs y EnemySensor.cs)
Los Goombas cuentan con dos modos de patrulla configurables: Por rango (ida y vuelta en una distancia fija) y Por colisión (caminar eternamente hasta chocar). Para evitar que los enemigos se queden trabados en las tuberías, se implementaron «sensores» laterales que actúan como disparadores para cambiar la dirección de la marcha.
7. Gestión del Tiempo y Música Dinámica (GameManager.cs)
El cronómetro de nivel interactúa directamente con el estado del juego y el audio:
- Muerte por tiempo: Si el contador llega a cero, se dispara la lógica de muerte de Mario mediante el componente
MarioDeath.
- Secuencia «Hurry Up»: Al bajar de 20 segundos, el
AudioManager detiene la música, reproduce un sonido de alerta y reanuda el tema principal con un pitch aumentado (1.3x) para incrementar la urgencia.
8. Arquitectura de Audio (AudioManager.cs)
Se ha creado un gestor centralizado mediante el patrón Singleton. Este gestor separa la música de fondo (Background Music) de los efectos de sonido (SFX). Se configuró específicamente el sistema para permitir que la música de victoria se reproduzca una sola vez (sin loop) al final del nivel, evitando solapamientos al reiniciar la escena.
9 Secuencia Final (FlagPole.cs)
Se programó una secuencia cinemática mediante Corrutinas que toma el control de Mario al tocar la bandera, sincronizando el descenso de la misma, el sonido de la polea, la caminata automática hacia el castillo y el posterior reinicio de la carga del nivel.
10. Decorado y diseño de nivel (Tilemaps)
El escenario se ha construido mediante un sistema de Grid con dos capas de Tilemap diferenciadas para separar la estética de la física:
- Tilemap Decorativo: Utilizado para elementos visuales que no interactúan con el jugador, como nubes, montañas y decoraciones de fondo.
- Tilemap Solid: Capa destinada al suelo y plataformas. Para optimizar el rendimiento y la fluidez del movimiento, se han añadido los componentes Tilemap Collider 2D y Composite Collider 2D.
- BackgroundUnderground Utilizado para el fondo negro del nivel subterráneo.
Esta configuración, apoyada en un Rigidbody 2D configurado como Static, permite fusionar las colisiones de los tiles individuales en una única geometría continua. De este modo, se evita que Mario se detenga o se trabe en las pequeñas uniones entre bloques al caminar, garantizando un control suave y profesional.
11. Sistema de Transición Cinematográfica (Pipe.cs)
Se ha implementado un sistema de teletransporte entre zonas (superficie y subsuelo) que recrea la icónica transición de las tuberías de la saga original:
- Animación de Descenso: Mediante una corrutina, se toma el control del personaje para realizar un movimiento suave.
- Gestión Dinámica de Capas: Para evitar el uso de objetos adicionales o «parches» visuales, el script cambia en tiempo real la Sorting Layer de Mario a
LevelSolid y reduce su Order in Layer a un valor inferior al del Tilemap. Esto permite que la tubería oculte visualmente al personaje mientras desciende.
- Física No-Inercial: Al iniciar la secuencia, el
Rigidbody2D conmuta a modo Kinematic y se resetea la linearVelocity para garantizar un movimiento lineal perfecto sin interferencias de la gravedad.
12. Nivel Subterráneo y Coleccionables (Coin.cs)
El juego se expande con una zona oculta que introduce nuevas dinámicas de exploración y gestión de audio:
- Música Atmosférica: El
AudioManager gestiona el cambio de clip de audio al detectar la transición de zona. Al entrar en la tubería, la música principal se detiene para dar prioridad al efecto de sonido (FX) de tránsito, reanudándose con otra música de fondo una vez Mario aparece en el subsuelo.
- Sistema de Monedas Blindado: Se han distribuido monedas en el nivel subterráneo con un script de recolección optimizado. Para evitar errores en el contador al recoger múltiples objetos rápidamente, el script utiliza un estado de control
isCollected que desactiva el colisionador y el renderizado en el microsegundo del impacto, asegurando que cada moneda se sume exactamente una sola vez al GameManager. Cámara Fija y Enmarcado: A diferencia del nivel principal donde la cámara sigue a Mario, en el subsuelo se ha implementado una Cámara Fija que mantiene el encuadre estático. Esto recrea la sensación de «sala cerrada» característica de este tipo de niveles.
Se ha evolucionado el sistema de estados del jugador para soportar la transformación dinámica.
- Gestión de Estados: El script controla tres estados (
isSmall, isBig, isFire). Al recoger una flor, se intercambia en tiempo real el RuntimeAnimatorController para actualizar todas las animaciones y el sprite base.
- Frames de Invencibilidad: Al recibir daño siendo Grande o de Fuego, Mario no muere; en su lugar, «encoge» e inicia una corrutina de parpadeo visual que desactiva temporalmente las colisiones con la capa de enemigos.
14. Mecánica de Proyectiles (Fireball.cs)
Se ha implementado un sistema de ataque a distancia basado en físicas:
- Física de Rebote: Utiliza el vector normal del contacto para detectar el suelo y aplicar un impulso vertical constante (
bounceForce), permitiendo que la bola «salte» por el escenario.
- Gestión de Memoria: Para optimizar el rendimiento, los proyectiles utilizan un temporizador de vida (
lifeTime) y el evento OnBecameInvisible para destruirse automáticamente si no impactan contra nada, evitando la acumulación de objetos en la jerarquía.
- Detección de Impacto: La bola de fuego interactúa con el script de patrulla de los enemigos para eliminarlos instantáneamente al contacto.
15. Power-Up: Flor de Fuego (FireFlower.cs)
La Flor de Fuego utiliza una lógica de emergencia similar a la seta pero con un comportamiento estático:
- Secuencia de Emergencia: Mediante una corrutina, la flor asciende desde el interior del bloque. El colisionador permanece desactivado durante el ascenso para evitar que el jugador la recoja antes de que sea visualmente lógico.
- Activación de Estado: Al entrar en contacto con el jugador, dispara el método
Grow(fireMode: true) en el controlador de Mario.
Recursos utilizados
Imágenes
Todos los sprites han sido generados mediante Inteligencia Artificial bajo mi supervisión para mantener una estética de 8 bits coherente.
- Sprites de Mario (Idle, Run, Jump).
- Sprites de Goomba y bloques.
- Decorado.
Sonidos y Música
Inteligencia Artificial
- Gemini (Google): Utilizado para la generación de todos los recursos gráficos del juego.
- Google. (2026). Gemini 3 Flash (versión de marzo) [Large language model]. https://gemini.google.com/.
PROMPTS utilizados
- «Genera un sprite de Mario Bros en pixel art mirando de frente, 16×16 píxeles.»
- «Crea un tileset del primer nivel de Super Mario Bros de NES.»
- «Genera una animación de un Goomba de Super Mario Bros de NES caminando en dos frames estilo retro.»
- «Genera un sprite de una moneda de Super Mario Bros de NES.»
- «Genera un sprite de un bloque de guardado al estilo Super Mario Bros de NES.»
- «Genera un sprite de una flor de fuego al estilo Siper Mario Bros de NES.»
Debatecontribution 0en Entrega PR – Sergi Goldero
No hay comentarios.
Lo siento, debes estar conectado para publicar un comentario.