Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Avvia lo sprinter con la barra spaziatrice: abbassati per accovacciarti, alzati per correre.

  1. In Update(), quando !running e Keyboard.current.spaceKey.wasPressedThisFrame: imposta set, spostati verso il basso di crouch, registra Set.
  2. Quando set e wasReleasedThisFrame: azzera set, imposta running, spostati verso l’alto di crouch, registra Go!.
  3. Mentre running, muoviti lungo +z alla velocità di speed unità 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

Esercitati da solo: Playground Unity