Azioni di input
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 47 di 60.
Verificare i tasti uno per uno lega uno script alla tastiera. Un'azione indica invece cosa fa il giocatore, e il progetto elenca quali tasti, levette e pulsanti la attivano. Un nuovo progetto Unity 6 include un set di azioni (l'asset InputSystem_Actions, impostato come insieme di azioni a livello di progetto), la cui mappa Player contiene Move (WASD, le frecce e la levetta sinistra di un gamepad), Look (il mouse o la levetta destra), Attack (il pulsante sinistro del mouse ed Enter), Interact (E, tenuto premuto), Crouch (C), Jump (Space e il pulsante inferiore del gamepad), Previous e Next (1 e 2) e Sprint (Left Shift). Sono attivate fin dall'inizio e InputSystem.actions.FindAction("Jump") ne recupera una per nome. Questa gru artigliata con visuale laterale 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 corrisponde a destra e sinistra, y a su e giù sui tasti, e il valore è normalizzato, quindi W e D premuti insieme danno (0.71, 0.71) anziché (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 funzionano come i tasti: WasPressedThisFrame(), WasReleasedThisFrame() e IsPressed(). Due errori causano eccezioni: un nome scritto male fa sì che FindAction restituisca null (una NullReferenceException alla prima lettura), mentre ReadValue<Vector3>() su Move genera una InvalidOperationException appena viene tenuto premuto un tasto, perché Move restituisce un Vector2.
Sfida
MedioFai camminare il rilevatore e pianta bandiere con le azioni del progetto.
- In
Start(), impostamoveAction,jumpActioneattackActionconInputSystem.actions.FindAction("Move"),"Jump"e"Attack". - In
Update(), cammina moltiplicandomoveAction.ReadValue<Vector2>()perspeed, con la sua y lungo z. - Chiama
Plant()quandojumpAction.WasPressedThisFrame()ePullUp()quando premi Attack.
Premi «Gioca», pianta tre bandiere e fai clic per rimuoverne una. Poi premi «Verifica».
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// trova le azioni Move, Jump e Attack
}
void Update()
{
// cammina con Move, esegui Plant() quando premi Jump e PullUp() quando premi Attack
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
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