Pulsanti e onClick
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 6 di 56.
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 il clic viene rilasciato sopra 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 passerebbe ciò che restituisce, cioè niente, 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 verrebbe aggiunto di nuovo all'elenco a ogni frame e un clic farebbe suonare il campanello centinaia di volte. Un clic viene conteggiato solo sul pulsante stesso, mentre Input.GetMouseButtonDown(0) è true per un clic in qualsiasi punto.
interactable di un pulsante determina se può essere utilizzato. bellButton.interactable = false; lo tinge con il suo Disabled Color e i suoi listener non vengono chiamati finché non viene reimpostato su true, così il giocatore vede quali pulsanti funzionano in quel momento. Su un telefono, gli stessi pulsanti si toccano.
Sfida
FacileL’ascensore della torre ha un pulsante Su e uno Giù. Scrivi Lift.cs (la scena collega upButton, downButton e floorText):
- In
Start(), collegaupButtona un metodo che faccia salire l’ascensore di un piano edownButtona uno che lo faccia scendere di un piano. - I piani vanno da 0 a
topFloor(3). L’ascensore si trova a y = piano xfloorHeight(3), quindi al piano 2 il suo valore y è 6. I valori x e z restano invariati. floorTextmostra il piano, comeFloor: 2, fin dall’inizio.- All’ultimo piano il pulsante Su non è interagibile, e al piano 0 non lo è il pulsante Giù.
Premi Play, raggiungi l’ultimo piano e torna indietro, poi premi Check.
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 ai metodi che spostano l'ascensore di un piano
}
}
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