Menu
CoddyTech

Tastiera e mouse

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 44 di 56.

Il sistema di 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, usando il suo valore Key. Mouse.current è il mouse, con leftButton, rightButton e position. isPressed di un controllo è true a ogni fotogramma in cui il controllo è tenuto premuto, proprio come accadeva con Input.GetKey. Questo sottomarino si immerge e riemerge 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;   // no keyboard plugged in

        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 più di recente 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 un errore in quel caso. La tastiera non ha assi, quindi la freccia giù e S sono due tasti distinti: per fare in modo che il sottomarino si immerga anche premendo S, verifica keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() restituisce la posizione del puntatore come Vector2 in pixel dello schermo a partire dall'angolo in basso a sinistra, come Input.mousePosition.

challenge icon

Sfida

Medio

Fai volare la mongolfiera con Input System. Il suo script ha drift (2), rise (3), sink (1), groundY (2) e flame, la fiamma del bruciatore sotto la mongolfiera.

  • Mentre tieni premuta la freccia destra o D, la mongolfiera si sposta verso destra (lungo +x) a drift unità al secondo; mentre tieni premuta la freccia sinistra o A, si sposta verso sinistra.
  • Il bruciatore è acceso mentre tieni premuto Spazio o il pulsante sinistro del mouse. Mostra flame solo quando è acceso.
  • Con il bruciatore acceso, la mongolfiera sale a rise unità al secondo. Quando è spento, scende a sink unità al secondo e non scende mai sotto groundY.

Usa Keyboard.current e Mouse.current. Questo progetto è configurato come un nuovo progetto Unity 6 (Active Input Handling: Input System Package), quindi qui la classe Input genera un'InvalidOperationException. Premi Play e fai volare la mongolfiera, poi premi Check.

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
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi