Premuto in questo frame
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 45 di 56.
isPressed risponde «è premuto adesso?» a ogni fotogramma in cui il tasto o il pulsante resta premuto. Per un'azione che dovrebbe avvenire una sola volta per pressione, un controllo offre 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 scende 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 mantenuto per mezzo secondo registra Stamp 1 una sola volta, sposta il timbro verso il basso una volta e poi di nuovo verso l'alto una volta. Con isPressed nel primo if, lo stesso clic registrerebbe circa 30 timbri e farebbe sprofondare il timbro di 15 unità nella scrivania. I tasti funzionano allo stesso modo: Keyboard.current.spaceKey.wasPressedThisFrame è true una sola volta per ogni pressione della barra spaziatrice.
Sfida
MedioIl velocista attende nei blocchi di partenza. Il suo script ha speed (6) e crouch (0.3).
- Quando Space viene premuto, il corridore si accovaccia nei blocchi: si sposta verso il basso di
crouchunità e viene registratoSet. - Quando Space viene rilasciato, dopo averlo premuto, il corridore si rialza (
crouchunità verso l'alto), viene registratoGo!e la corsa inizia: da quel momento corre lungo +z aspeedunità al secondo. - Tenendo premuto Space,
Setviene registrato una sola volta, non a ogni frame. Una volta che il corridore è in corsa, Space non fa più nulla.
Leggi Space con Keyboard.current. Premi Play, tieni premuto Space e rilascialo, poi premi Check.
Provalo tu
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
void Update()
{
// Space premuto: accovacciati e registra Set. Space rilasciato: alzati, registra Go! e corri.
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti 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: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input