Corrección de Bugs en Colisiones y Vida de un Personaje en Videojuegos

Clase 50 de 53Curso de C# para Videojuegos

Resumen

Pequeños ajustes marcan gran diferencia. Aquí verás cómo corregir la detección de suelo con un raycast en superficies irregulares y cómo visualizar vida y maná privados con SerializedField para depurar mejor. Además, se identifica que no está contemplada la muerte del jugador cuando la vida llega a cero.

¿Cómo corregir el raycast de salto en Unity?

Un raycast demasiado corto puede fallar al detectar el suelo en rocas u objetos con colliders complejos. La solución práctica: exponer la distancia como variable y ajustarla desde el editor hasta encontrar el valor estable.

  • El valor fijo 1.5 no alcanza el suelo en rocas irregulares.
  • Pruebas rápidas: 1.6 y 1.7 aún fallan. 1.8 mejora. 2.0 y hasta 2.5 aseguran margen.
  • Beneficio: colisiones más inteligentes sin depender del collider exacto del suelo.

¿Qué pasos aplicar para el ajuste del raycast?

  • Crear una variable pública o serializada: jumpRayCastDistance.
  • Sustituir el 1.5 en Debug.DrawRay dentro de Update.
  • Sustituir el 1.5 en Physics2D.Raycast dentro del método que comprueba suelo.
  • Probar valores en tiempo de ejecución hasta que el personaje no se quede enganchado.
public class PlayerController : MonoBehaviour
{
    [SerializeField] private float jumpRayCastDistance = 1.5f;

    void Update()
    {
        // Visualiza el rayo hacia abajo con la distancia ajustable.
        Debug.DrawRay(transform.position, Vector2.down * jumpRayCastDistance, Color.red);
    }

    bool IsTouchingTheGround()
    {
        // Usa la misma distancia para la comprobación real.
        return Physics2D.Raycast(transform.position, Vector2.down, jumpRayCastDistance);
    }
}

¿Cuándo conviene usar un Polygon Collider 2D?

Cuando un Box Collider no se ajusta bien a la forma, Polygon Collider 2D ofrece mejor precisión. Unity lo divide en fragmentos convexos para cálculos fiables.

  • Un polígono es convexo si la línea entre dos puntos queda dentro del contorno.
  • Mayor precisión implica más coste computacional que un cuadrado o un círculo.
  • Úsalo cuando la justicia del juego lo exija: colisiones “sentidas” como correctas.
  • Los hijos de un prefab en escena no siempre heredan cambios del padre: revisa y actualiza manualmente.
  • Incluso el personaje con Capsule Collider podría usar Polygon Collider, según necesidad.

¿Cómo visualizar vida y maná privados con SerializedField?

Si las variables son privadas y no aparecen en el editor, marca con SerializedField para inspeccionarlas sin exponerlas públicamente. Es ideal para depurar la barra de vida y el maná durante el gameplay.

  • Ventaja: ver valores en el editor sin romper el encapsulamiento.
  • Facilita validar cuánto daño recibe el jugador al contacto con enemigos.
public class PlayerController : MonoBehaviour
{
    [SerializeField] private int health; // puntos de vida visibles en el editor.
    [SerializeField] private int mana;   // puntos de maná visibles en el editor.
}

¿Qué observar al probar el daño del enemigo?

  • Aumentar la velocidad del enemigo acelera la prueba del daño.
  • La barra de vida desciende golpe a golpe de forma visible.
  • Con SerializedField, se confirma la vida restante del jugador en el inspector.

¿Cómo gestionar la muerte del jugador al llegar a cero?

Actualmente, la vida puede bajar de cero y el juego sigue en marcha. No se activa ninguna lógica de muerte: el jugador permanece activo pese a tener valores negativos.

  • Estado detectado: la barra deja de cambiar y la vida interna sigue bajando bajo cero.
  • Falta contemplar el caso de muerte: detener control del jugador, feedback visual o reinicio.
  • Próximo paso: implementar la gestión de muerte tras alcanzar 0 de vida.

¿Te funcionó el ajuste de la distancia del raycast o preferiste Polygon Collider 2D? Comparte tus resultados, valores que te sirvieron y consejos para optimizar colisiones en tus niveles.