Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Lass die Nach-oben- und Nach-unten-Schaltflächen des Aufzugs funktionieren.

  1. Verbinde in Start() upButton mit GoUp (floor++) und downButton mit GoDown (floor--) mithilfe von onClick.AddListener.
  2. Schreibe ShowFloor(), das in Start() und nach jeder Bewegung aufgerufen wird: Der y-Wert des Aufzugs ist floor * floorHeight, und floorText zeigt Floor: 2 an.
  3. „Nach oben“ ist unterhalb von topFloor bedienbar, „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

Übe selbstständig: Unity-Playground