Premuto in questo frame
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 46 di 60.
isPressed risponde «è premuto adesso?» a ogni fotogramma in cui il tasto resta premuto. Per qualcosa che dovrebbe accadere una sola volta per pressione, un controllo ha altre due risposte: wasPressedThisFrame è true solo nel fotogramma in cui il tasto o il pulsante viene premuto, mentre wasReleasedThisFrame lo è solo nel fotogramma in cui viene rilasciato. Sostituiscono Input.GetKeyDown e Input.GetKeyUp, nonché GetMouseButtonDown e GetMouseButtonUp. Questo timbro di gomma si abbassa quando si preme il pulsante del mouse e si solleva quando lo si rilascia:
using UnityEngine;
using UnityEngine.InputSystem;
public class Stamp : MonoBehaviour
{
public float drop = 0.5f;
private int stamps;
void Update()
{
Mouse mouse = Mouse.current;
if (mouse.leftButton.wasPressedThisFrame)
{
transform.position += Vector3.down * drop;
stamps++;
Debug.Log("Stamp " + stamps);
}
if (mouse.leftButton.wasReleasedThisFrame)
{
transform.position += Vector3.up * drop;
}
}
}Un clic tenuto premuto per mezzo secondo registra Stamp 1 una sola volta, sposta il timbro in basso una volta e poi di nuovo in alto una volta. Con isPressed nel primo if, lo stesso clic registrerebbe circa 30 timbri e farebbe sprofondare il timbro di 15 unità nel banco. I tasti funzionano allo stesso modo: Keyboard.current.spaceKey.wasPressedThisFrame è true una volta per ogni pressione della barra spaziatrice.
Sfida
MedioAvvia lo sprinter con la barra spaziatrice: abbassati per accovacciarti, alzati per correre.
- In
Update(), quando!runningeKeyboard.current.spaceKey.wasPressedThisFrame: impostaset, spostati verso il basso dicrouch, registraSet. - Quando
setewasReleasedThisFrame: azzeraset, impostarunning, spostati verso l’alto dicrouch, registraGo!. - Mentre
running, muoviti lungo +z alla velocità dispeedunità al secondo.
Premi «Gioca», tieni premuta la barra spaziatrice e rilasciala: Set, poi Go! nella Console. Poi premi «Verifica».
Provalo tu
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
private bool set;
private bool running;
void Update()
{
// Space premuto: accovacciati e registra Set nel log. Space rilasciato: alzati, registra Go! nel log e corri.
}
}
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