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.
Sfida
MedioFai volare la mongolfiera con Keyboard.current e Mouse.current.
- Mentre
rightArrowKeyodKeyisPressed, spostati lungo +x adriftunità al secondo; conleftArrowKeyoaKey, lungo -x. bool burnerè true quandospaceKeyoleftButtonè premuto; chiamaflame.SetActive(burner);.- Bruciatore acceso: sali a
rise; spento: scendi asink, senza mai scendere sottogroundY.
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
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity