Hoy vamos a aprender a rotar el player que creamos en el pasado Tutorial de Unity 3D para principiantes. La rotación vertical simulará el movimiento de la cabeza arriba y abajo, mientras la horizontal hará girar el personaje sobre si mismo. Para ello necesitaremos crear un Script en C#. Por lo tanto necesitas unos conocimientos básicos sobre este lenguaje de programación. Si todavía no los tienes te sugiero que primero leas algunos de los tutoriales sobre C Sharp que tenemos en nuestro sitio.

Aprende C# desde cero – Proyecto de consola
Aprende C# desde cero – if, else, switch

Rotar el player mediante el ratón

A nuestro personaje tenemos que darle la habilidad de rotar para ver lo que tiene a su alrededor. Y lo haremos mediante los controles del ratón.

Primero creamos una carpeta Scripts para organizar nuestros archivos C#. Accedemos a ella y creamos un script “RotatePlayer”. Declaramos 2 variables públicas: “horSpeed” y “vertSpeed”, que nos permitirán controlar la velocidad de rotación.

Para detectar la entrada del ratón utilizamos el código Input.GetAxis() . El método GetAxis(…) retorna un valor entre  -1 y 1.
Dentro de la función Update() accedemos al componente transform del player y usamos el método Rotate(x, y, z). Le pasamos como argumentos el producto de cada una de las entradas del ratón por su velocidad. Dejando el 3º argumento a 0, ya que el personaje no debe rotar en el eje Z.

 

public class RotatePlayer : MonoBehaviour
{
    public float horSpeed = 10.0f;
    public float vertSpeed = 10.0f;

    void Update()
    {
        float h = horSpeed * Input.GetAxis("Mouse X");
        float v = vertSpeed * Input.GetAxis("Mouse Y");

        transform.Rotate(v, h, 0);
    }
}

 

Ahora añade el script “RotatePlayer” al GameObject Player y haz clic en play. Como puedes comprobar tenemos un personaje que puede rotar la cabeza verticalmente sin ninguna limitación. No queremos este comportamiento en un juego FPS. Nuestro siguiente paso será corregir este inconveniente.

Limitar la rotación vertical

A continuación crea 2 variables más para limitar la rotación vertical y una tercera para guardar el ángulo de rotación vertical; minVertical, maxVertical y vertical.

public float minVertical = -50.0f;
    public float maxVertical = 50.0f;
    private float vertical = 0;
}

Reemplaza el código del método Update con las siguientes instrucciones:

void Update()
    {
        float horizontal = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * horSpeed;
        
        vertical -= vertSpeed * Input.GetAxis("Mouse Y");
        vertical = Mathf.Clamp(vertical, minVertical, maxVertical);

        transform.localEulerAngles = new Vector3(vertical, horizontal, 0);    
    }
}

En cada iteración de Update, sustraemos a la variable vertical el producto de Input.GetAxis(“Mouse Y”) por la velocidad vertSpeed.
El ángulo de rotación vertical final lo conseguimos a través del método Clamp(), el cual devuelve un valor dentro de los limites mínimo y máximo.

En el componente transform ya no usamos el método Rotate(). En su lugar establecemos en la propiedad localEulerAngles un nuevo vector3 con las entradas vertical y horizontal.

En la siguiente entrada de El Tutorial Unity 3D para principiantes añadimos la funcionalidad de movimiento.

El Tutorial Unity 3D para principiantes – Mover el player


0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies