Detén la vida negativa con un control simple y fiable: añade una condición que, al llegar a 0 puntos de vida, ejecute la muerte del personaje y active el game over. Con dos líneas claras en tu lógica de daño y curación, aseguras una experiencia consistente, con animación de muerte y reinicio de partida.
¿Cómo impedir la vida negativa y finalizar la partida?
En el player controller, localiza el método que gestiona tanto curación como daño: collect health. Ya controla el límite superior de vida, pero faltaba contemplar el caso contrario. Agrega un condicional para cuando los puntos de vida sean menores o iguales a 0 y llama al método de muerte.
¿Dónde añadir la condición en collect health?
Inserta esta comprobación al actualizar los health points tras recibir daño:
if(healthPoints <=0){die();}
Con esto, en vez de depender solo de una kill zone, el personaje muere al quedarse sin vida y se lanza todo el flujo de fin de partida.
¿Qué hace el método die con game over?
El método die vuelve a comprobar la puntuación máxima, cambia la animación a muerte y llama al game over del manager. Este, a su vez, hace un set game state, muestra la interface de game over y permite reiniciar la partida. Resultado: final limpio y controlado cuando la vida llega a 0.
¿Cómo validar el cambio con una prueba rápida?
Guarda el script, vuelve al editor y prueba en ejecución. Salta (incluye el supersalto si lo deseas) y fuerza la reducción de vida acelerando al enemigo: de 1.5 a 10. Verás la barra descender hasta 0, la animación de muerte y el fin del juego correctamente.
Ejecutar play y observar la barra de vida.
Usar el supersalto para moverte con rapidez.
Aumentar la velocidad del enemigo: de 1.5 a 10.
Esperar a que la vida baje a 0.
Confirmar animación de muerte y game over.
¿Qué sigue para pulir y personalizar?
Ahora tienes todo para un acabado profesional. Crea niveles únicos y pantallas personalizadas. Sustituye los placeholders de monedas y puntuación actual en la pantalla de game over por los valores que ya calcula tu lógica de partida. El objetivo: un diseño coherente con tu visión.
Diseñar niveles únicos y personalizados.
Reemplazar placeholders por datos reales de monedas y puntuación.
Ajustar la UI de game over con tu estilo.
Exportar y compartir un video del resultado.
Pronto añadirás audio, sonidos y efectos especiales, y cerrarás jugando lo que has construido. ¿Qué mejoras vas a implementar primero? Comparte tus avances y dudas en comentarios.
Control de Vida y Muerte de Personaje en Videojuegos
Hola Intente usar tu solucion pero al parecer no pude, use : groundCollider=GetComponent<PolygonCollider2D>(); ya que uso un poligono en lugar de un box colider pero al ponerla en ceros en el metodo die no pasa nada, el raycast sigue haciendolo flotar
Tengo una grandísima duda y agradecería la ayuda.
Estoy en la corrección de algunos bugs del juego.
Mi problema es el siguiente:
Cada vez que se genera un nivel procedural, luego de recorrer los niveles, los enemigos no se están autogenerando con el nivel. Sólo me sale el nivel sin el enemigo.
¿Alguien sabe por qué no se inicializa?
Gracias <3
Solucionado!!
Vale, fue una simple linea que tuve que tapar.
El problema es al inicializar la posición del personaje, en el start.
De alguna forma impedía que cuando eliminara el bloque, el enemigo no se destruía sino que continuaba su trayectoria.
Por si a alguien le pasa lo mismo, esta fué la linea de código que tapé.
Una recomendación para que al morir el personaje no quede como flotando, es usar el BoxCollider2D y editar su offset :
Vector2 startOffsetGround;publicvoidDie(){//modificacion de offset de collider ground colliderGround.offset=newVector2(0,0); float travelledDistance =GetTravelledDistance();//persistir datos jugador - preferencias en sesion float previousMaxDistance =PlayerPrefs.GetFloat("maxscore",0f);if(travelledDistance > previousMaxDistance){PlayerPrefs.SetFloat("maxscore", travelledDistance);} animator.SetBool(STATE_ALIVE,false);GameManager.sharedInstance.GameOver();}
importante guardar la posición del offset al iniciar el juego para que al reiniciar la partida el personaje vuelva a tener su offset original.