En este tema, aprenderás cómo manejar las entradas del usuario en Unity utilizando C#. Las entradas son fundamentales para cualquier juego, ya que permiten a los jugadores interactuar con el juego a través de dispositivos como el teclado, el ratón o un controlador.

Objetivos

  • Entender cómo Unity maneja las entradas del usuario.
  • Aprender a capturar entradas del teclado y del ratón.
  • Implementar un script básico para mover un objeto en respuesta a las entradas del usuario.

Conceptos Clave

Input Manager

Unity proporciona una clase llamada Input que se utiliza para manejar las entradas del usuario. Esta clase permite capturar entradas de diferentes dispositivos como el teclado, el ratón y los controladores.

Métodos Comunes de la Clase Input

  • Input.GetKey(KeyCode key): Devuelve true mientras la tecla especificada está siendo presionada.
  • Input.GetKeyDown(KeyCode key): Devuelve true en el primer frame en que la tecla especificada es presionada.
  • Input.GetKeyUp(KeyCode key): Devuelve true en el frame en que la tecla especificada es liberada.
  • Input.GetAxis(string axisName): Devuelve un valor flotante entre -1 y 1 basado en la entrada del usuario. Comúnmente usado para capturar movimientos del ratón o de un joystick.

Ejemplo Práctico: Movimiento de un Objeto

Vamos a crear un script que permita mover un objeto en la escena utilizando las teclas de flecha del teclado.

Paso 1: Crear el Script

  1. En el panel de Proyecto, haz clic derecho y selecciona Create > C# Script.
  2. Nombra el script PlayerMovement.
  3. Abre el script en tu editor de código preferido.

Paso 2: Escribir el Código

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5.0f;

    void Update()
    {
        // Capturar las entradas del teclado
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        // Crear un vector de movimiento basado en las entradas
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // Aplicar el movimiento al objeto
        transform.Translate(movement * speed * Time.deltaTime, Space.World);
    }
}

Explicación del Código

  • public float speed = 5.0f;: Define la velocidad de movimiento del objeto. Esta variable es pública para que puedas ajustarla desde el Inspector en Unity.
  • void Update(): El método Update se llama una vez por frame. Aquí es donde capturamos las entradas del usuario.
  • float moveHorizontal = Input.GetAxis("Horizontal");: Captura la entrada horizontal (teclas de flecha izquierda/derecha o A/D).
  • float moveVertical = Input.GetAxis("Vertical");: Captura la entrada vertical (teclas de flecha arriba/abajo o W/S).
  • Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);: Crea un vector de movimiento basado en las entradas capturadas.
  • transform.Translate(movement * speed * Time.deltaTime, Space.World);: Aplica el movimiento al objeto. Time.deltaTime se usa para asegurar que el movimiento sea consistente independientemente de la tasa de frames.

Paso 3: Adjuntar el Script al Objeto

  1. En la jerarquía de Unity, selecciona el objeto que deseas mover.
  2. Arrastra el script PlayerMovement desde el panel de Proyecto hasta el Inspector del objeto seleccionado.

Paso 4: Probar el Movimiento

  1. Haz clic en el botón Play en la parte superior de la ventana de Unity.
  2. Usa las teclas de flecha o las teclas W, A, S, D para mover el objeto en la escena.

Ejercicio Práctico

Ejercicio 1: Movimiento Diagonal

Modifica el script PlayerMovement para que el objeto se mueva en diagonal cuando se presionen dos teclas de dirección al mismo tiempo.

Solución

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5.0f;

    void Update()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // Normalizar el vector de movimiento para evitar movimientos más rápidos en diagonal
        if (movement.magnitude > 1)
        {
            movement.Normalize();
        }

        transform.Translate(movement * speed * Time.deltaTime, Space.World);
    }
}

Explicación de la Solución

  • if (movement.magnitude > 1) { movement.Normalize(); }: Normaliza el vector de movimiento para evitar que el objeto se mueva más rápido en diagonal.

Conclusión

En esta lección, has aprendido cómo manejar las entradas del usuario en Unity utilizando la clase Input. Ahora puedes capturar entradas del teclado y del ratón para mover objetos en tu juego. En la próxima lección, profundizaremos en la creación y adjunto de scripts para añadir más funcionalidad a tus objetos de juego.

Curso de Unity

Módulo 1: Introducción a Unity

Módulo 2: Programación Básica en Unity

Módulo 3: Trabajando con Activos

Módulo 4: Física y Colisiones

Módulo 5: Interfaz de Usuario (UI)

Módulo 6: Audio en Unity

Módulo 7: Programación Avanzada

Módulo 8: Física Avanzada e IA

Módulo 9: Optimización y Rendimiento

Módulo 10: Publicación y Más Allá

© Copyright 2024. Todos los derechos reservados