Boutons et onClick
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 6 sur 56.
GameObject > UI > Button - TextMeshPro ajoute un bouton : une Image sur laquelle cliquer, un composant Button et un 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 ; le code 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 à nouveau la liste à chaque image, et un seul clic ferait sonner 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; le teinte avec sa couleur Disabled Color et ses écouteurs ne sont pas appelés tant que la propriété n'est pas remise à true, afin que le joueur voie quels boutons fonctionnent à cet instant. Sur un téléphone, on appuie sur les mêmes boutons.
Défi
FacileL’ascenseur de la tour possède un bouton Up et un bouton Down. Écris Lift.cs (la scène référence upButton, downButton et floorText) :
- Dans
Start(), relieupButtonà une méthode qui fait monter l’ascenseur d’un étage, etdownButtonà une méthode qui le fait descendre d’un étage. - Les étages vont de 0 à
topFloor(3). L’ascenseur se trouve à y = étage xfloorHeight(3), donc à l’étage 2, son y vaut 6. Ses x et z restent inchangés. floorTextaffiche l’étage, sous la formeFloor: 2, dès le départ.- À l’étage supérieur, le bouton Up n’est pas interactif, et à l’étage 0, le bouton Down ne l’est pas.
Appuie sur Play, monte jusqu’en haut puis redescends, et enfin appuie sur Check.
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()
{
// Associer upButton et downButton à des méthodes qui déplacent l'ascenseur d'un étage
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Créer de vrais jeux
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banque