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.
Desafio
FácilFaça os botões Para cima e Para baixo do elevador funcionarem.
- Em
Start(), conecteupButtonaGoUp(floor++) edownButtonaGoDown(floor--) comonClick.AddListener. - Escreva
ShowFloor(), chamado emStart()e após cada movimento: o valor de y do elevador éfloor * floorHeight, efloorTextexibeFloor: 2. - 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
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro2Botõ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 bancoPratique por conta própria: Playground de Unity