Tutorial: Criando HUD no Unity – Parte 3 – Texto dinâmico

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.

1 - 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.

2 - new script

 

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.

3 - Script com campo

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!

Filipe Leal

Bacharel em Ciência da Computação pela UDESC e certificado como Microsoft Specialist. Atualmente trabalha como programador na Basecorp Learning Systems. Reside em Edmonton - Canadá. Faixa preta com 1o. grau em Pa-kua, tem preferência por jogos de Ação/Aventura, RPG, Luta e Party Games. Seu jogo favorito é The Legend of Zelda - Ocarina of Time.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *