Menu
CoddyTech

Odliczanie czasu

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 4 z 60.

Odliczanie przechowuje pozostały czas w zmiennej typu float i odejmuje od niego Time.deltaTime w każdej klatce. Ostatnia klatka rzadko wypada dokładnie przy 0, dlatego Mathf.Max zatrzymuje odliczanie na tej wartości, a zakończenie musi nastąpić tylko raz. Ten zapalnik daje graczowi 5 sekund na rozbrojenie bomby:

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 zaokrągla w górę, tak jak powinno działać odliczanie: 5 przez całą pierwszą sekundę (4.99 zaokrągla się w górę do 5), 1 w ostatniej sekundzie i 0 dopiero po upływie czasu. (int)fuse obcięłoby 4.99 do 4 i pokazywałoby 0 przez całą ostatnią sekundę, gdy bomba wciąż tyka; Mathf.RoundToInt pokazywałoby 0 przez ostatnie pół sekundy. Dłuższe odliczanie wyświetlane w minutach i sekundach podlega tej samej zasadzie: najpierw zaokrąglij czas w górę do pełnych sekund, a dopiero potem je sformatuj.

Wczesne return pozostawia BOOM na ekranie: bez niego następna klatka wyświetliłaby na nim Fuse: 0. Tekst ma też kolor, a fuseText.color = Color.red zmienia go na czerwony.

challenge icon

Wyzwanie

Łatwy

Spraw, by parkomat odliczał opłacony czas.

  1. W Update() odejmij Time.deltaTime od timeLeft, nie schodząc poniżej 0, i wyświetl Mathf.CeilToInt(timeLeft) jako minuty i sekundy: 1:15.
  2. Spacja dodaje 30 sekund, maksymalnie do maxTime (2:00).
  3. Przy 0 wyświetl EXPIRED w kolorze Color.red. Zacznij Update() od if (timeLeft == 0f) return;, aby tak pozostało.

Naciśnij „Graj” i wrzucaj monety: licznik zatrzyma się na 2:00. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // Odliczaj timeLeft w dół i wyświetlaj go w minutach i sekundach; Space dodaje 30 sekund
    }
}

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity