Teclado y ratón
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 45 de 60.
El Input System proporciona un objeto para 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 pulsado, como ocurría con Input.GetKey. Este submarino se sumerge y emerge con las flechas, y enciende el foco mientras se mantiene pulsado 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 dispositivo usado más recientemente, y es null cuando no hay ninguno: un teléfono o una consola podrían no tener teclado, y las comprobaciones de valores nulos evitan que el script genere una excepción en esos casos. El teclado no tiene ejes, así que la flecha abajo y 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() proporciona la posición del puntero como un Vector2 en píxeles de la pantalla, desde la esquina inferior izquierda, igual que Input.mousePosition.
Desafío
IntermedioVuela con el globo aerostático usando Keyboard.current y Mouse.current.
- Mientras
rightArrowKeyodKeyisPressed, desplázate a lo largo de +x adriftunidades por segundo; conleftArrowKeyoaKey, a lo largo de -x. bool burneres verdadero si se pulsaspaceKeyoleftButton; llama aflame.SetActive(burner);.- Con el quemador encendido, asciende a
rise; apagado, desciende asink, nunca por debajo degroundY.
Pulsa «Jugar» y vuela: mantén pulsada la barra espaciadora o el botón del ratón para ascender. Después, pulsa «Comprobar».
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, enciende la llama con Space o el ratón
}
}
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ímetro2Botones 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 sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity