jairogarcíarincón

Rotando al Jugador


529

Rotando al Jugador

La rotación del Jugador es más complicada, ya que en función de la dirección a la que se encuentre mirando, debemos rotarlo cuando pulsemos una de las teclas de dirección.

Además, si pulsamos dos teclas de dirección a la vez, el Jugador debe rotar teniendo en cuenta esas dos teclas.

Vamos a necesitar dos variables, una para el ángulo de rotación y otra para la velocidad de dicha rotación:


//Variables para la rotación

private int anguloRotacion;

public float velocidadRotacion = 10;


Añade después de las estructuras de saltar del método FixedUpdate() la siguiente sentencia condicional:


//Rotar

if (rotar()){

 transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(0, anguloRotacion, 0), velocidadRotacion);

}


De este modo, cuando el método rotar() devuelva true, se producirá una rotación en el ángulo indicado con la velocidad indicada. Para finalizar, añade el método rotar() al script (por ejemplo, después del método isSuelo()):


private bool rotar(){


if (Input.GetKey("right"))

{

if (Input.GetKey("up"))

{

 anguloRotacion = 45;

}

 else if (Input.GetKey("down"))

{

 anguloRotacion = 135;

}

else

 {

 anguloRotacion = 90;

}

return true;

 }

 else if (Input.GetKey("left"))

{

if (Input.GetKey("up"))

{

anguloRotacion = -45;

 }

 else if (Input.GetKey("down"))

 {

 anguloRotacion = -135;

}

else

 {

anguloRotacion = -90;

}

 return true;

}

 else if (Input.GetKey("up"))

{

anguloRotacion = 0;

return true;

}

else if (Input.GetKey("down"))

{

 anguloRotacion = 180;

 return true;

}

 else{

 return false;

}


}



Esta sería la opción "manual", en la cual hemos analizado el problema y a continuación hemos implementado una función que lo resuelva. No obstante, el proceso se puede simplificar mucho con el uso de la función Slerp de Unity, que nos permite rotar un objeto desde un punto a otro con una duración determinada. de este modo, todo el código anterior se podría sustituir por:


//Rotar
if (movimiento != Vector3.zero)
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movimiento), 0.15f);
}


Publicado el 02 de Diciembre de 2021

unityanimaciónhumanoide3d