Menu
CoddyTech

Przyciski i onClick

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

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 wywoływanych po zwolnieniu kliknięcia na przycisku. Skrypt dodaje własną metodę do tej listy za pomocą AddListener, jeden raz, 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'. Nasłuchujący nie przyjmuje parametrów i zwraca void. Jeśli metoda zostanie dodana w Update(), dołączałaby do listy ponownie w każdej klatce, a jedno kliknięcie dzwoniłoby setki razy. Kliknięcie jest rejestrowane tylko na samym przycisku, podczas gdy Input.GetMouseButtonDown(0) ma wartość true dla kliknięcia w dowolnym miejscu.

Właściwość interactable przycisku określa, czy można go użyć. bellButton.interactable = false; nadaje mu kolor wyłączenia, a jego nasłuchujące metody nie są wywoływane, dopóki nie zostanie ponownie ustawiony na true, dzięki czemu gracz widzi, które przyciski działają w danej chwili. Na telefonie te same przyciski dotyka się palcem.

challenge icon

Wyzwanie

Łatwy

Winda wieży ma przyciski Up i Down. Napisz Lift.cs (scena łączy upButton, downButton i floorText):

  • W Start() przypisz do upButton metodę, która przesuwa windę o jedno piętro w górę, a do downButton metodę, która przesuwa ją o jedno piętro w dół.
  • Piętra są ponumerowane od 0 do topFloor (3). Winda znajduje się na wysokości y = piętro x floorHeight (3), więc na piętrze 2 jej y wynosi 6. Jej x i z pozostają bez zmian.
  • Od początku floorText wyświetla piętro w formacie Floor: 2.
  • Na najwyższym piętrze nie można użyć przycisku Up, a na piętrze 0 — przycisku Down.

Naciśnij Play, wjedź na samą górę i zjedź z powrotem, a następnie naciśnij Check.

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()
    {
        // Podłącz upButton i downButton do metod, które przesuwają windę o jedno piętro
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier