Menu
CoddyTech

Boutons et onClick

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 6 sur 60.

GameObject > UI > Button - TextMeshPro ajoute un bouton : une image sur laquelle cliquer, un composant Button et un objet enfant Text (TMP) pour son libellé. Le onClick du bouton est un événement, une liste de méthodes qu’il appelle lorsqu’un clic est relâché dessus. Un script ajoute sa propre méthode à cette liste avec AddListener, une seule fois, dans Start(). Button se trouve dans l’espace de noms 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) transmet la méthode elle-même, sans parenthèses. AddListener(Ring()) appellerait Ring immédiatement et transmettrait ce qu’elle renvoie, c’est-à-dire rien ; cela ne compile donc pas : Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Un écouteur ne prend aucun paramètre et renvoie void. Ajoutée dans Update(), la même méthode rejoindrait de nouveau la liste à chaque image, et un clic ferait sonner la cloche des centaines de fois. Un clic n’est pris en compte que sur le bouton lui-même, tandis que Input.GetMouseButtonDown(0) est vrai pour un clic n’importe où.

La propriété interactable d’un bouton détermine s’il peut être utilisé. bellButton.interactable = false; lui applique sa couleur Disabled Color et ses écouteurs ne sont pas appelés tant que la propriété n’est pas remise à true ; le joueur voit ainsi quels boutons fonctionnent à cet instant. Sur un téléphone, on appuie sur les mêmes boutons.

challenge icon

Défi

Facile

Fais fonctionner les boutons Up et Down de l’ascenseur.

  1. Dans Start(), relie upButton à GoUp (floor++) et downButton à GoDown (floor--) avec onClick.AddListener.
  2. Écris ShowFloor(), appelée dans Start() et après chaque déplacement : le y de l’ascenseur vaut floor * floorHeight, et floorText affiche Floor: 2.
  3. Le bouton Up est interactif lorsque l’étage est inférieur à topFloor, et le bouton Down lorsqu’il est supérieur à 0.

Appuie sur « Jouer » : le bouton Up devient grisé en haut. Puis appuie sur « Vérifier ».

Essayez vous-même

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()
    {
        // Relier upButton et downButton à des méthodes qui déplacent l'ascenseur d'un étage
    }
}

Toutes les leçons de Créer de vrais jeux

Entraînez-vous par vous-même : Playground Unity