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)
: Devuelvetrue
mientras la tecla especificada está siendo presionada.Input.GetKeyDown(KeyCode key)
: Devuelvetrue
en el primer frame en que la tecla especificada es presionada.Input.GetKeyUp(KeyCode key)
: Devuelvetrue
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
- En el panel de Proyecto, haz clic derecho y selecciona Create > C# Script.
- Nombra el script
PlayerMovement
. - 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étodoUpdate
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
- En la jerarquía de Unity, selecciona el objeto que deseas mover.
- Arrastra el script
PlayerMovement
desde el panel de Proyecto hasta el Inspector del objeto seleccionado.
Paso 4: Probar el Movimiento
- Haz clic en el botón Play en la parte superior de la ventana de Unity.
- 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
- Introducción a Unity e Instalación
- Descripción General de la Interfaz de Unity
- Creando Tu Primer Proyecto
- Objetos de Juego Básicos y Componentes
Módulo 2: Programación Básica en Unity
- Introducción a C# para Unity
- Creación y Adjunto de Scripts
- Entendiendo MonoBehaviour
- Manejo Básico de Entradas
Módulo 3: Trabajando con Activos
- Importación y Gestión de Activos
- Uso de la Tienda de Activos
- Creación y Uso de Prefabs
- Animación Básica
Módulo 4: Física y Colisiones
- Introducción a la Física en Unity
- Cuerpos Rígidos y Colisionadores
- Detección Básica de Colisiones
- Uso de Materiales Físicos
Módulo 5: Interfaz de Usuario (UI)
- Introducción a la UI de Unity
- Creación y Personalización de Elementos UI
- Manejo de Eventos UI
- Creación de Menús y HUDs
Módulo 6: Audio en Unity
- Introducción al Audio en Unity
- Importación y Uso de Clips de Audio
- Programación Básica de Audio
- Audio 3D y Sonido Espacial
Módulo 7: Programación Avanzada
- Conceptos Avanzados de C# para Unity
- Corutinas y Programación Asíncrona
- Objetos Scriptables
- Editores Personalizados y Gizmos
Módulo 8: Física Avanzada e IA
- Técnicas Avanzadas de Física
- Búsqueda de Caminos y Navegación
- Programación Básica de IA
- Máquinas de Estado y Árboles de Comportamiento
Módulo 9: Optimización y Rendimiento
- Técnicas de Perfilado y Optimización
- Gestión de Memoria
- Reducción de Llamadas de Dibujo
- Optimización de Física y Colisiones