Menu
CoddyTech

Botões e onClick

Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 6 de 60.

GameObject > UI > Button - TextMeshPro adiciona um botão: uma imagem em que você pode clicar, um componente Button e um elemento 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 o código não compila: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Um ouvinte não recebe parâmetros e retorna void. Se adicionado em Update(), o mesmo método entraria na lista novamente a cada quadro, e um clique faria a campainha tocar centenas de vezes. Um clique só é registrado 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; aplica a ele a cor desativada e seus ouvintes não são chamados até que seja definido novamente como true, para que o jogador veja quais botões estão funcionando naquele momento. Em um celular, os mesmos botões são tocados.

challenge icon

Desafio

Fácil

Faça os botões Para cima e Para baixo do elevador funcionarem.

  1. Em Start(), conecte upButton a GoUp (floor++) e downButton a GoDown (floor--) com onClick.AddListener.
  2. Escreva ShowFloor(), chamado em Start() e após cada movimento: o valor de y do elevador é floor * floorHeight, e floorText exibe Floor: 2.
  3. Para cima fica interativo abaixo de topFloor; Para baixo, acima de 0.

Pressione “Jogar”: Para cima fica esmaecido no último andar. Depois, “Verificar”.

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

Todas as lições de Criando Jogos de Verdade

Pratique por conta própria: Playground de Unity