Menu
CoddyTech

Botões e onClick

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 6 de 56.

GameObject > UI > Button - TextMeshPro adiciona um botão: uma imagem para clicar, um componente Button e um filho Text (TMP) para seu rótulo. O onClick do botão é um evento, uma lista de métodos que ele chama quando o clique é solto sobre ele. Um script adiciona seu próprio método a essa lista com AddListener, uma vez, em Start(). Button fica no namespace 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) passa o próprio método, sem parênteses. AddListener(Ring()) chamaria Ring imediatamente e passaria o que ele retorna, que é nada, então não compila: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Um listener não recebe parâmetros e retorna void. Se adicionado em Update(), o mesmo método seria incluído na lista novamente a cada frame, e um clique faria a campainha tocar centenas de vezes. Um clique só conta no próprio botão, enquanto Input.GetMouseButtonDown(0) é verdadeiro para um clique em qualquer lugar.

A propriedade interactable de um botão determina se ele pode ser usado. bellButton.interactable = false; o colore com sua cor desabilitada, e seus listeners não são chamados até que seja definido novamente como true, para que o jogador veja quais botões estão funcionando no momento. Em um celular, os mesmos botões são tocados.

challenge icon

Desafio

Fácil

O elevador da torre tem um botão de subir e um de descer. Escreva Lift.cs (a cena vincula upButton, downButton e floorText):

  • Em Start(), vincule upButton a um método que faça o elevador subir um andar, e downButton a um método que o faça descer um andar.
  • Os andares vão de 0 a topFloor (3). O elevador fica em y = andar x floorHeight (3), então, no andar 2, seu y é 6. x e z permanecem como estão.
  • floorText mostra o andar, como Floor: 2, desde o início.
  • No último andar, o botão de subir não pode ser acionado, e no andar 0, o botão de descer não pode ser acionado.

Pressione Play, suba até o último andar e volte, depois Check.

Experimente você mesmo

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()
    {
        // Conecte upButton e downButton a métodos que movem o elevador um andar
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade