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 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.

challenge icon

Desafío

Fácil

El 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(), conecta upButton a un método que suba el ascensor un piso, y downButton a uno que lo baje un piso.
  • Los pisos van del 0 a topFloor (3). El ascensor se encuentra en y = piso x floorHeight (3), así que en el piso 2 su y es 6. Su x y z se mantienen como están.
  • floorText muestra el piso, como Floor: 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
    }
}
quiz iconPonte a prueba

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