Menu
CoddyTech

Przyciski i onClick

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 6 z 60.

GameObject > UI > Button - TextMeshPro dodaje przycisk: obraz, który można kliknąć, komponent Button oraz element podrzędny Text (TMP) z jego etykietą. onClick przycisku to zdarzenie — lista metod, które wywołuje po zwolnieniu kliknięcia na przycisku. Skrypt dodaje własną metodę do tej listy za pomocą AddListener, jednokrotnie, w Start(). Button znajduje się w przestrzeni nazw 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) przekazuje samą metodę, bez nawiasów. AddListener(Ring()) wywołałoby Ring od razu i przekazałoby to, co zwraca — czyli nic — dlatego kod się nie kompiluje: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Odbiornik zdarzenia nie przyjmuje parametrów i zwraca void. Jeśli ta sama metoda zostanie dodana w Update(), będzie dopisywana do listy ponownie w każdej klatce, a jedno kliknięcie wywoła dzwonek setki razy. Kliknięcie jest rejestrowane tylko na samym przycisku, natomiast Input.GetMouseButtonDown(0) ma wartość true po kliknięciu w dowolnym miejscu.

Właściwość interactable przycisku określa, czy można go użyć. bellButton.interactable = false; zmienia jego odcień na kolor wyłączonego elementu, a jego odbiorniki zdarzeń nie są wywoływane, dopóki właściwość nie zostanie ponownie ustawiona na true, dzięki czemu gracz widzi, które przyciski działają w danej chwili. Na telefonie te same przyciski można stuknąć.

challenge icon

Wyzwanie

Łatwy

Spraw, aby przyciski „Góra” i „Dół” windy działały.

  1. W Start() podłącz upButton do GoUp (floor++), a downButton do GoDown (floor--) za pomocą onClick.AddListener.
  2. Napisz ShowFloor(), wywoływaną w Start() i po każdym ruchu: współrzędna y windy to floor * floorHeight, a floorText wyświetla Floor: 2.
  3. Przycisk Góra można nacisnąć poniżej topFloor, a przycisk Dół powyżej 0.

Naciśnij „Graj”: przycisk Góra zostanie wyszarzony na najwyższym piętrze. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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()
    {
        // Przypisz upButton i downButton do metod, które przesuwają windę o jedno piętro
    }
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity