Neste tutorial, vamos usar um Texto Dinâmico para criar um cronômetro para o nosso jogo!
No tutorial anterior vimos como usar os objetos do tipo texto na nossa UI e suas propriedades. Agora iremos mudar o texto dinamicamente por meio de um script!
Criando um Texto Dinâmico
Uma vez que adicionamos um Canvas e um objeto Text na nossa cena, já possuímos o necessário para criarmos o nosso texto dinâmico.
O que precisamos a mais é um Script que vai controlar o conteúdo do nosso texto.
Mãos à obra!
Crie um GameObject vazio. Para isso, clique em Create -> Create Empty.
Selecione-o e clique em Add Component -> New Script e coloque o nome de “Cronometro”. Isso irá adicionar o script ao objeto e a pasta Assets. Dê duplo clique nele para editá-lo.
A primeira coisa que precisamos fazer é importar a biblioteca UnityEngine.UI no código para que possamos usar os objetos do Canvas.
Abaixo de onde tem using UnityEngine; adicione a seguinte linha:
using UnityEngine.UI;
Isso diz para o código que ele deve incluir esta biblioteca para funcionar.
O próximo passo é criar um objeto público do tipo Text e uma variável para guardarmos o tempo atual. Abaixo da linha public class Cronometro : MonoBehaviour { insira:
public Text CronometroText;
private float tempoAtual;
Ótimo! Vamos inicializar o tempoAtual como zero, e a cada frame do jogo nós vamos incrementar este valor.
Dentro da função Start adicione:
tempoAtual = 0;
Agora vamos incrementar o tempoAtual a cada frame. Dentro da função Update adicione:
tempoAtual += Time.deltaTime;
CronometroText.text = tempoAtual.ToString("F2");
Opa! Coisas estranhas aqui! Vou explicar.
O tempo de um jogo entre um frame e outro nem sempre é o mesmo. Depende muito da máquina da pessoa, poder de processamento, placa de vídeo, etc. Para sabermos quanto tempo levou pra renderizar de um frame para o outro usamos o Time.deltaTime. Ele nos diz o tempo que levou entre um frame e outro.
Outra coisa que vemos aqui é o operador +=. Ele é uma forma abreviada deste código: tempoAtual = tempoAtual + Time.deltaTime;
Para não repetir o tempoAtual podemos usar esse operador.
Por fim, quando atribuímos o valor de tempoAtual para o nosso cronometro, usamos .ToString(“F2”). O que é isso? Isso converte o tempoAtual, que atualmente é um float, para o tipo string. E mais, ele formata o número para possuir apenas 2 casas decimais usando o parâmetro “F2”. Legal, não é?
Voltando ao Unity só precisamos atribuir o nosso Text que está no Canvas para a propriedade CronometroText do Script. Selecionar o GameObject em que criamos o script. Note que agora existe o campo Cronometro Text abaixo do script. Basta você arrastar o Text do canvas para ele ou clicar na bolinha ao lado e selecioná-lo na lista para conectar os dois.
Execute o jogo e veja o seu cronômetro rodando no jogo.
É isso aí pessoal! Semana que vem vamos brincar com botões e fazer mais interações na nossa UI!
Abraços e até mais!