Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Vuela con el globo aerostático usando Keyboard.current y Mouse.current.

  1. Mientras rightArrowKey o dKey isPressed, desplázate a lo largo de +x a drift unidades por segundo; con leftArrowKey o aKey, a lo largo de -x.
  2. bool burner es verdadero si se pulsa spaceKey o leftButton; llama a flame.SetActive(burner);.
  3. Con el quemador encendido, asciende a rise; apagado, desciende a sink, nunca por debajo de groundY.

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

Practica por tu cuenta: Playground de Unity