Botones y onClick
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 6 de 56.
GameObject > UI > Button - TextMeshPro añade un botón: una Image en la que se puede hacer clic, un componente Button y un elemento secundario Text (TMP) para su etiqueta. El onClick del botón es un evento, una lista de métodos que llama cuando se suelta un clic sobre él. Un script añade su propio método a esa lista con AddListener, una sola vez, en Start(). Button se encuentra en el espacio de nombres 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) pasa el método en sí, sin paréntesis. AddListener(Ring()) llamaría a Ring de inmediato y pasaría lo que devuelve, que es nada, así que no se compila: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Un oyente no recibe parámetros y devuelve void. Si se añade en Update(), el mismo método se volvería a agregar a la lista en cada fotograma, y un clic haría sonar el timbre cientos de veces. Un clic solo cuenta en el propio botón, mientras que Input.GetMouseButtonDown(0) es true para un clic en cualquier lugar.
La propiedad interactable de un botón determina si se puede usar. bellButton.interactable = false; lo tiñe con su color Disabled Color y no se llama a sus oyentes hasta que se vuelve a establecer en true, para que el jugador vea qué botones funcionan en ese momento. En un teléfono, se tocan los mismos botones.
Desafío
FácilEl ascensor de la torre tiene un botón para subir y otro para bajar. Escribe Lift.cs (la escena enlaza upButton, downButton y floorText):
- En
Start(), conectaupButtona un método que suba el ascensor un piso, ydownButtona uno que lo baje un piso. - Los pisos van del 0 a
topFloor(3). El ascensor se encuentra en y = piso xfloorHeight(3), así que en el piso 2 su y es 6. Su x y z se mantienen como están. floorTextmuestra el piso, comoFloor: 2, desde el inicio.- En el piso superior, el botón para subir no se puede pulsar, y en el piso 0 no se puede pulsar el botón para bajar.
Pulsa Play, sube hasta el piso superior y vuelve, luego pulsa Check.
Pruébalo tú mismo
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()
{
// Vincula upButton y downButton a métodos que muevan el ascensor un piso
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada