Menu
CoddyTech

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.

challenge icon

Sfida

Facile

L’ascensore della torre ha un pulsante Su e uno Giù. Scrivi Lift.cs (la scena collega upButton, downButton e floorText):

  • In Start(), collega upButton a un metodo che faccia salire l’ascensore di un piano e downButton a uno che lo faccia scendere di un piano.
  • I piani vanno da 0 a topFloor (3). L’ascensore si trova a y = piano x floorHeight (3), quindi al piano 2 il suo valore y è 6. I valori x e z restano invariati.
  • floorText mostra il piano, come Floor: 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
    }
}
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