Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Vuela 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 drift unidades 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 flame solo mientras esté encendido.
  • Con el quemador encendido, el globo asciende a rise unidades por segundo. Cuando está apagado, desciende a sink unidades por segundo y nunca baja de groundY.

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
    }
}
quiz iconPonte a prueba

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