Teclado y ratón
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 44 de 56.
El sistema de entrada asigna un objeto a cada dispositivo. Keyboard.current es el teclado, y cada tecla es un control con un nombre: spaceKey, aKey, upArrowKey o Keyboard.current[Key.Space] para cualquier tecla mediante su valor Key. Mouse.current es el ratón, con leftButton, rightButton y position. isPressed de un control es true en cada fotograma que se mantiene presionado, igual que ocurría con Input.GetKey. Este submarino se sumerge y sale a la superficie con las flechas e ilumina con su reflector mientras se mantiene presionado el botón del ratón:
using UnityEngine;
using UnityEngine.InputSystem;
public class Submarine : MonoBehaviour
{
public float diveSpeed = 2f;
public Light searchlight;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null) return; // no hay ningún teclado conectado
if (keyboard.downArrowKey.isPressed)
transform.position += Vector3.down * diveSpeed * Time.deltaTime;
if (keyboard.upArrowKey.isPressed)
transform.position += Vector3.up * diveSpeed * Time.deltaTime;
searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
}
}current es el último dispositivo utilizado, y es null cuando no hay ninguno: puede que un teléfono o una consola no tengan teclado, y las comprobaciones de valores nulos evitan que el script produzca un error en esos casos. El teclado no tiene ejes, así que la flecha abajo y la S son dos teclas distintas: un submarino que también deba sumergirse al pulsar S comprueba keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() devuelve la posición del puntero como un Vector2 en píxeles de pantalla desde la esquina inferior izquierda, como Input.mousePosition.
Desafío
IntermedioVuela el globo aerostático con el sistema de entrada. Su script tiene drift (2), rise (3), sink (1), groundY (2) y flame, la llama del quemador debajo del globo.
- Mientras se mantenga pulsada la flecha derecha o D, el globo se desplaza hacia la derecha (a lo largo de +x) a
driftunidades por segundo; mientras se mantenga pulsada la flecha izquierda o A, se desplaza hacia la izquierda. - El quemador está encendido mientras se mantenga pulsada la barra espaciadora o el botón izquierdo del ratón. Muestra
flamesolo mientras esté encendido. - Con el quemador encendido, el globo asciende a
riseunidades por segundo. Cuando está apagado, desciende asinkunidades por segundo y nunca baja degroundY.
Usa Keyboard.current y Mouse.current. Este proyecto está configurado como un proyecto nuevo de Unity 6 (Active Input Handling: Input System Package), por lo que la clase Input lanza una InvalidOperationException aquí. Pulsa Play y vuela; después, Check.
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.InputSystem;
public class Balloon : MonoBehaviour
{
public float drift = 2f;
public float rise = 3f;
public float sink = 1f;
public float groundY = 2f;
public GameObject flame;
void Update()
{
// Desplázate con las flechas o A y D, activa la llama con Space o el ratón
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada