Um cronômetro regressivo
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 4 de 56.
Uma contagem regressiva mantém o tempo restante em um float e subtrai Time.deltaTime dele a cada quadro. O último quadro raramente chega exatamente a 0, então Mathf.Max para a contagem nesse ponto, e o fim precisa acontecer uma única vez. Este pavio dá ao jogador 5 segundos para desarmar uma bomba:
public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;
void Update()
{
if (exploded)
{
return;
}
fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);
if (fuse == 0f)
{
exploded = true;
fuseText.text = "BOOM";
fuseText.color = Color.red;
}
}Mathf.CeilToInt arredonda para cima, que é o que uma contagem regressiva exibe: 5 durante todo o primeiro segundo (4.99 arredonda para cima, para 5), 1 durante o último e 0 somente quando o tempo acaba. (int)fuse reduziria 4.99 para 4 e exibiria 0 durante todo o último segundo enquanto a bomba ainda está contando; Mathf.RoundToInt exibiria 0 durante a última metade do segundo. Uma contagem regressiva mais longa exibida em minutos e segundos segue a mesma regra: primeiro arredonde o tempo para cima até segundos inteiros e, depois, formate-os.
O return antecipado mantém BOOM na tela: sem ele, o próximo quadro escreveria Fuse: 0 por cima. Um texto também tem uma cor, e fuseText.color = Color.red o deixa vermelho.
Desafio
FácilO parquímetro faz a contagem regressiva do tempo pago. Escreva seu Update() em ParkingMeter.cs (a cena vincula meterText):
timeLeftcomeça em 75 segundos (definido no Inspector) e diminui a cada frame, nunca ficando abaixo de 0.meterTextmostra o tempo restante em minutos e segundos, arredondado para cima até segundos inteiros: de 75 até 74.01, mostra1:15, e com 0.4 segundos restantes, mostra0:01.- A tecla Espaço insere uma moeda: mais 30 segundos, mas nunca mais do que
maxTime(120, que é exibido como2:00). - Em 0, o texto mostra
EXPIRED, em vermelho (Color.red). A partir daí, o parquímetro permanece em 0, e não é mais possível inserir moedas.
Pressione Jogar, insira algumas moedas e depois Verificar.
Experimente você mesmo
using UnityEngine;
using TMPro;
public class ParkingMeter : MonoBehaviour
{
public TMP_Text meterText;
public float timeLeft = 60f;
public float maxTime = 120f;
void Update()
{
// Faça uma contagem regressiva de timeLeft e exiba-o em minutos e segundos; Space adiciona 30 segundos
}
}
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