Botones y onClick
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 6 de 60.
GameObject > UI > Button - TextMeshPro agrega un botón: una imagen en la que se puede hacer clic, un componente Button y un elemento secundario Text (TMP) para su etiqueta. onClick del botón es un evento: una lista de métodos que llama cuando se suelta un clic sobre él. Un script agrega 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 no 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 agrega en Update(), el mismo método volvería a añadirse a la lista en cada fotograma, y un clic haría sonar el timbre cientos de veces. Un clic solo cuenta sobre 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 deshabilitado y no se llama a sus oyentes hasta que vuelve a establecerse 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ácilHaz que funcionen los botones Subir y Bajar del ascensor.
- En
Start(), conectaupButtonconGoUp(floor++) ydownButtonconGoDown(floor--) medianteonClick.AddListener. - Escribe
ShowFloor(), que se llama enStart()y después de cada movimiento: la coordenada y del ascensor esfloor * floorHeight, yfloorTextmuestraFloor: 2. - Subir se puede pulsar por debajo de
topFloor; Bajar, por encima de 0.
Pulsa «Jugar»: el botón Subir se desactiva al llegar al piso más alto. Después, pulsa «Comprobar».
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 con métodos que muevan el ascensor un piso
}
}
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ímetro2Botones 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 sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity