Menu
CoddyTech

Tastiera e mouse

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 45 di 60.

Il sistema Input assegna un oggetto a ogni dispositivo. Keyboard.current è la tastiera e ogni tasto è un controllo con un nome: spaceKey, aKey, upArrowKey oppure Keyboard.current[Key.Space] per qualsiasi tasto tramite il suo valore Key. Mouse.current è il mouse, con leftButton, rightButton e position. isPressed di un controllo è true a ogni fotogramma in cui viene tenuto premuto, proprio come accadeva con Input.GetKey. Questo sottomarino si immerge e risale con le frecce e accende il faro di ricerca mentre il pulsante del mouse è tenuto premuto:

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;   // nessuna tastiera collegata

        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 è il dispositivo usato per ultimo ed è null quando non ce n'è nessuno: un telefono o una console potrebbero non avere una tastiera e i controlli null impediscono allo script di generare errori in quel caso. La tastiera non ha assi, quindi la freccia giù e S sono due tasti distinti: un sottomarino che dovrebbe immergersi anche premendo S verifica keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() restituisce la posizione del puntatore come Vector2 in pixel sullo schermo, misurati dall'angolo in basso a sinistra, proprio come Input.mousePosition.

challenge icon

Sfida

Medio

Fai volare la mongolfiera con Keyboard.current e Mouse.current.

  1. Mentre rightArrowKey o dKey isPressed, spostati lungo +x a drift unità al secondo; con leftArrowKey o aKey, lungo -x.
  2. bool burner è true quando spaceKey o leftButton è premuto; chiama flame.SetActive(burner);.
  3. Bruciatore acceso: sali a rise; spento: scendi a sink, senza mai scendere sotto groundY.

Premi «Gioca» e vola: tieni premuto Spazio o il pulsante del mouse per salire. Poi premi «Verifica».

Provalo tu

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()
    {
        // spostati con le frecce o con A e D, accendi la fiamma con Space o con il mouse
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity