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.
Desafio
FácilO 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(), vinculeupButtona um método que faça o elevador subir um andar, edownButtona 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 xfloorHeight(3), então, no andar 2, seu y é 6. x e z permanecem como estão. floorTextmostra o andar, comoFloor: 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
}
}
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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco