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ąć.
Wyzwanie
ŁatwySpraw, aby przyciski „Góra” i „Dół” windy działały.
- W
Start()podłączupButtondoGoUp(floor++), adownButtondoGoDown(floor--) za pomocąonClick.AddListener. - Napisz
ShowFloor(), wywoływaną wStart()i po każdym ruchu: współrzędna y windy tofloor * floorHeight, afloorTextwyświetlaFloor: 2. - 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
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w bankuPoćwicz samodzielnie: Edytor online Unity