jairogarcíarincón

Resolución Ejercicio propuesto


234

Enunciado

Modifica el código anterior para que el Jugador no se quede flotando en el aire cuando se muera.


Resolución

El Jugador se queda flotando en el aire debido a que el collider no se va modificando con las diferentes animaciones, al ser de tipo Box Collider 2D.

Una manera de resolver el problema sería ajustar el tamaño del collider en tiempo de ejecución desde el script.

Además, lo haremos después de un tiempo de espera mediante una Coroutine para que se produzca cuando ya se haya reproducido la animación de morir casi por completo y el efecto sea más natural.

Primero, añade, en el script del Jugador, un nuevo método llamado cambiarCollider():


//Cambiar tamaño del collider tras un tiempo
IEnumerator cambiarCollider()
{
//Espero 0,5 segundos
yield return new WaitForSeconds(0.5f);

//Cambio el tamaño del collider para que se apoye en el suelo
bc2d.size = new Vector2(bc2d.size.x, 0.77f);
}


Por último, modifica el método OnTriggerEnter2D del script Jugador para que incluya la llamada al método cambiarCollider() cuando se muera el Jugador:


private void OnTriggerEnter2D(Collider2D other)
{

//Si el jugador pisa un objeto con la etiqueta trampa
if (other.gameObject.CompareTag("Trampa"))
{
//Reproduzco la animación de morir
animator.SetBool("isDead", true);
//Modifico el collider para que apoye en el suelo
StartCoroutine(cambiarCollider());
//Deshabilito el script para que ya no se mueva más
GetComponent<Jugador>().enabled = false;

}
}


Nota: Los valores utilizados corresponden al tamaño deseado del collider en el caso de este ejemplo, deberás ajustarlos a tu caso particular.


Publicado el 20 de Septiembre de 2021

unity2danimación