Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Der 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() upButton mit einer Methode, die den Aufzug um ein Stockwerk nach oben fährt, und downButton mit 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 x floorHeight (3), also ist sein y-Wert auf Stockwerk 2 gleich 6. x und z bleiben unverändert.
  • floorText zeigt von Anfang an das Stockwerk an, etwa als Floor: 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
    }
}
quiz iconTeste dich selbst

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