Menu
CoddyTech

Azioni di input

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

Testare i tasti uno per uno lega uno script alla tastiera. Un’azione indica invece cosa fa il giocatore, e il progetto elenca quali tasti, stick e pulsanti la attivano. Un nuovo progetto Unity 6 include un insieme di azioni (la risorsa InputSystem_Actions, impostata come insieme di azioni a livello di progetto), la cui mappa Player contiene Move (WASD, le frecce e lo stick sinistro di un gamepad), Look (il mouse o lo stick destro), Attack (il pulsante sinistro del mouse e Invio), Interact (E, tenuto premuto), Crouch (C), Jump (Spazio e il pulsante sud del gamepad), Previous e Next (1 e 2) e Sprint (Maiusc sinistro). Sono attivate fin dall’inizio e InputSystem.actions.FindAction("Jump") ne recupera una tramite il nome. Questa gru artiglio vista di lato si muove lungo x e y e afferra con Jump:

using UnityEngine;
using UnityEngine.InputSystem;

public class ClawCrane : MonoBehaviour
{
    public float speed = 3f;

    private InputAction moveAction;
    private InputAction jumpAction;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;

        if (jumpAction.WasPressedThisFrame())
            Debug.Log("Grab!");
    }
}

Le azioni vengono recuperate una sola volta, in Start, e conservate nei campi InputAction. Move restituisce un Vector2: x indica destra e sinistra, y indica su e giù sui tasti, ed è normalizzato, quindi W e D premuti insieme restituiscono (0.71, 0.71) invece di (1, 1). La gru è vista di lato, quindi usa y per l’altezza; un gioco visto dall’alto lo userebbe per z. Le azioni dei pulsanti rispondono come i tasti: WasPressedThisFrame(), WasReleasedThisFrame() e IsPressed(). Due errori causano eccezioni: un nome scritto in modo errato fa sì che FindAction restituisca null (una NullReferenceException alla prima lettura) e ReadValue<Vector3>() su Move genera un’InvalidOperationException non appena si tiene premuto un tasto, perché Move contiene un Vector2.

challenge icon

Sfida

Medio

Il topografo mappa un campo innevato, visto dall'alto, e porta flags (3) da piantare lungo il percorso. Lo script ha speed (4), flags, flagPrefab e una lista planted. Usa le azioni del progetto:

  • Move fa camminare il topografo attraverso la neve a speed unità al secondo: a destra e a sinistra lungo x, in alto e in basso lungo z.
  • Ogni pressione di Jump pianta una bandiera: una copia di flagPrefab alle coordinate x e z del topografo, a y 0.75, aggiunta a planted. Consuma una delle flags e registra quante ne restano, ad esempio Flags left: 2. Se non restano bandiere, Jump non ne pianta nessuna.
  • Ogni pressione di Attack (un clic sinistro) estrae l'ultima bandiera piantata: viene distrutta e rimossa dalla lista, flags aumenta di uno e viene registrata la stessa riga.

Premi Gioca, pianta tre bandiere e poi estraine una, quindi premi Controlla.

Provalo tu

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class Surveyor : MonoBehaviour
{
    public float speed = 4f;
    public int flags = 3;
    public GameObject flagPrefab;

    private List<GameObject> planted = new List<GameObject>();

    void Start()
    {
        // trova le azioni Move, Jump e Attack
    }

    void Update()
    {
        // cammina con Move, pianta una bandiera con Jump, rimuovine una con Attack
    }
}
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