Pulsanti e onClick
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 6 di 60.
GameObject > UI > Button - TextMeshPro aggiunge un pulsante: un'immagine su cui fare clic, un componente Button e un elemento figlio Text (TMP) per la sua etichetta. onClick del pulsante è un evento, un elenco di metodi che richiama quando si rilascia un clic su di esso. Uno script aggiunge il proprio metodo a quell'elenco con AddListener, una sola volta, in Start(). Button si trova nello spazio dei nomi UnityEngine.UI:
using UnityEngine;
using UnityEngine.UI;
public class Doorbell : MonoBehaviour
{
public Button bellButton;
private int rings;
void Start()
{
bellButton.onClick.AddListener(Ring);
}
void Ring()
{
rings++;
Debug.Log("Ding! " + rings);
}
}AddListener(Ring) passa il metodo stesso, senza parentesi. AddListener(Ring()) chiamerebbe Ring subito e ne passerebbe il valore restituito, che non è nulla, quindi non viene compilato: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Un listener non accetta parametri e restituisce void. Se aggiunto in Update(), lo stesso metodo si aggiungerebbe di nuovo all'elenco a ogni fotogramma e un solo clic farebbe suonare il campanello centinaia di volte. Un clic viene registrato solo sul pulsante, mentre Input.GetMouseButtonDown(0) è true per un clic in qualsiasi punto.
La proprietà interactable di un pulsante determina se può essere usato. bellButton.interactable = false; gli applica il colore Disabled Color e i suoi listener non vengono chiamati finché non viene impostato di nuovo su true, così il giocatore vede quali pulsanti funzionano in quel momento. Su un telefono, gli stessi pulsanti si toccano.
Sfida
FacileFai funzionare i pulsanti Su e Giù dell’ascensore.
- In
Start(), collegaupButtonaGoUp(floor++) edownButtonaGoDown(floor--) cononClick.AddListener. - Scrivi
ShowFloor(), chiamata inStart()e dopo ogni spostamento: la coordinata y dell’ascensore èfloor * floorHeightefloorTextmostraFloor: 2. - Su è interattivo quando si è sotto
topFloor, Giù quando si è sopra 0.
Premi «Gioca»: Su diventa grigio al piano più alto. Poi premi «Verifica».
Provalo tu
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class Lift : MonoBehaviour
{
public Button upButton;
public Button downButton;
public TMP_Text floorText;
public int topFloor = 3;
public float floorHeight = 3f;
private int floor;
void Start()
{
// Collega upButton e downButton a metodi che spostano l'ascensore di un piano
}
}
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