Menu
CoddyTech

Odliczanie czasu

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

Odliczanie przechowuje pozostały czas w float i odejmuje od niego Time.deltaTime w każdej klatce. Ostatnia klatka rzadko wypada dokładnie przy 0, więc Mathf.Max zatrzymuje odliczanie na tej wartości, a koniec musi nastąpić tylko raz. Ten lont 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ę, co sprawdza się w odliczaniu: 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 pokazywane w minutach i sekundach działa według tej samej zasady: najpierw zaokrąglij czas w górę do pełnych sekund, a potem sformatuj wynik.

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

challenge icon

Wyzwanie

Łatwy

Parkometr odlicza opłacony czas. Napisz jego Update() w pliku ParkingMeter.cs (scena łączy go z meterText):

  • timeLeft zaczyna się od 75 sekund (ustawionych w Inspectorze) i zmniejsza się w każdej klatce, nigdy nie spadając poniżej 0.
  • meterText wyświetla pozostały czas w minutach i sekundach, zaokrąglony w górę do pełnych sekund: od 75 do 74.01 pokazuje 1:15, a przy 0.4 sekundy do końca pokazuje 0:01.
  • Spacja wrzuca monetę: dodaje 30 sekund, ale nigdy więcej niż maxTime (120, co daje 2:00).
  • Przy 0 tekst zmienia się na EXPIRED i jest czerwony (Color.red). Od tej chwili parkometr pozostaje na 0, a wrzucanie monet nie przynosi już efektu.

Naciśnij Play, wrzuć kilka monet, a następnie naciśnij Check.

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 i wyświetlaj go w minutach i sekundach; Space dodaje 30 sekund
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier