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.
Sfida
MedioIl 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
speedunità 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
flagPrefaballe coordinate x e z del topografo, a y 0.75, aggiunta aplanted. Consuma una delleflagse registra quante ne restano, ad esempioFlags 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,
flagsaumenta 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
}
}
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