Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

O parquímetro faz a contagem regressiva do tempo pago. Escreva seu Update() em ParkingMeter.cs (a cena vincula meterText):

  • timeLeft começa em 75 segundos (definido no Inspector) e diminui a cada frame, nunca ficando abaixo de 0.
  • meterText mostra o tempo restante em minutos e segundos, arredondado para cima até segundos inteiros: de 75 até 74.01, mostra 1:15, e com 0.4 segundos restantes, mostra 0:01.
  • A tecla Espaço insere uma moeda: mais 30 segundos, mas nunca mais do que maxTime (120, que é exibido como 2: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
    }
}
quiz iconTeste seus conhecimentos

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