Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Haz que funcionen los botones Subir y Bajar del ascensor.

  1. En Start(), conecta upButton con GoUp (floor++) y downButton con GoDown (floor--) mediante onClick.AddListener.
  2. Escribe ShowFloor(), que se llama en Start() y después de cada movimiento: la coordenada y del ascensor es floor * floorHeight, y floorText muestra Floor: 2.
  3. 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

Practica por tu cuenta: Playground de Unity