Buttons und onClick
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 6 von 56.
GameObject > UI > Button - TextMeshPro fügt eine Schaltfläche hinzu: ein anklickbares Image, eine Button-Komponente und ein Text (TMP)-Kindobjekt für die Beschriftung. Das onClick der Schaltfläche ist ein Ereignis, eine Liste von Methoden, die aufgerufen werden, wenn ein Klick darauf losgelassen wird. Ein Skript fügt dieser Liste einmal in Start() seine eigene Methode mit AddListener hinzu. Button befindet sich im Namespace 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) übergibt die Methode selbst, ohne Klammern. AddListener(Ring()) würde Ring sofort aufrufen und den Rückgabewert übergeben, der nichts ist. Daher wird der Code nicht kompiliert: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Ein Listener nimmt keine Parameter entgegen und gibt void zurück. Wird die Methode in Update() hinzugefügt, käme sie in jedem Frame erneut zur Liste hinzu, und ein Klick würde hunderte Male klingeln. Ein Klick wird nur auf der Schaltfläche selbst erfasst, während Input.GetMouseButtonDown(0) bei einem Klick an beliebiger Stelle true ist.
Die Eigenschaft interactable einer Schaltfläche legt fest, ob sie verwendet werden kann. bellButton.interactable = false; färbt sie mit ihrer deaktivierten Farbe ein, und ihre Listener werden nicht aufgerufen, bis sie wieder auf true gesetzt wird. So sieht der Spieler, welche Schaltflächen gerade funktionieren. Auf einem Smartphone werden dieselben Schaltflächen angetippt.
Aufgabe
EinfachDer Aufzug im Turm hat eine Aufwärts- und eine Abwärtstaste. Schreibe Lift.cs (die Szene verknüpft upButton, downButton und floorText):
- Verknüpfe in
Start()upButtonmit einer Methode, die den Aufzug um ein Stockwerk nach oben fährt, unddownButtonmit einer Methode, die ihn um ein Stockwerk nach unten fährt. - Die Stockwerke reichen von 0 bis
topFloor(3). Der Aufzug befindet sich bei y = Stockwerk xfloorHeight(3), also ist sein y-Wert auf Stockwerk 2 gleich 6. x und z bleiben unverändert. floorTextzeigt von Anfang an das Stockwerk an, etwa alsFloor: 2.- Auf dem obersten Stockwerk ist die Aufwärtstaste nicht bedienbar, und auf Stockwerk 0 ist es die Abwärtstaste nicht.
Drücke Play, fahre bis ganz nach oben und zurück und klicke dann auf Check.
Probier es selbst
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()
{
// Verbinde upButton und downButton mit Methoden, die den Aufzug um eine Etage bewegen
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank