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.
Wyzwanie
ŁatwyParkometr odlicza opłacony czas. Napisz jego Update() w pliku ParkingMeter.cs (scena łączy go z meterText):
timeLeftzaczyna się od 75 sekund (ustawionych w Inspectorze) i zmniejsza się w każdej klatce, nigdy nie spadając poniżej 0.meterTextwyświetla pozostały czas w minutach i sekundach, zaokrąglony w górę do pełnych sekund: od 75 do 74.01 pokazuje1:15, a przy 0.4 sekundy do końca pokazuje0:01.- Spacja wrzuca monetę: dodaje 30 sekund, ale nigdy więcej niż
maxTime(120, co daje2:00). - Przy 0 tekst zmienia się na
EXPIREDi 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
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku