Buttons und onClick
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 6 von 60.
GameObject > UI > Button - TextMeshPro fügt eine Schaltfläche hinzu: ein Bild, auf das du klicken kannst, 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 auf ihr losgelassen wird. Ein Skript fügt dieser Liste mit AddListener einmalig in Start() eine eigene Methode 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 akzeptiert keine Parameter und gibt void zurück. Wird die Methode in Update() hinzugefügt, kommt sie in jedem Frame erneut zur Liste hinzu, und ein Klick würde hunderte Male klingeln. Ein Klick zählt nur auf der Schaltfläche selbst, 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 erst aufgerufen, wenn sie wieder auf true gesetzt wird. So sieht der Spieler, welche Schaltflächen gerade funktionieren. Auf einem Smartphone werden dieselben Schaltflächen angetippt.
Aufgabe
EinfachLass die Nach-oben- und Nach-unten-Schaltflächen des Aufzugs funktionieren.
- Verbinde in
Start()upButtonmitGoUp(floor++) unddownButtonmitGoDown(floor--) mithilfe vononClick.AddListener. - Schreibe
ShowFloor(), das inStart()und nach jeder Bewegung aufgerufen wird: Der y-Wert des Aufzugs istfloor * floorHeight, undfloorTextzeigtFloor: 2an. - „Nach oben“ ist unterhalb von
topFloorbedienbar, „Nach unten“ oberhalb von 0.
Drücke „Spielen“: Oben wird die Schaltfläche „Nach oben“ ausgegraut. Drücke dann „Prüfen“.
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 jeweils um ein Stockwerk bewegen
}
}
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons 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Übe selbstständig: Unity-Playground