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.
Wyzwanie
ŁatwyWinda wieży ma przyciski Up i Down. Napisz Lift.cs (scena łączy upButton, downButton i floorText):
- W
Start()przypisz doupButtonmetodę, która przesuwa windę o jedno piętro w górę, a dodownButtonmetodę, 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 xfloorHeight(3), więc na piętrze 2 jej y wynosi 6. Jej x i z pozostają bez zmian. - Od początku
floorTextwyświetla piętro w formacieFloor: 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
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski 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 banku