Geri Sayım Zamanlayıcısı
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 4 / 56.
Geri sayım, kalan süreyi bir float içinde tutar ve her karede bundan Time.deltaTime çıkarır. Son kare nadiren tam olarak 0'a denk gelir; bu yüzden Mathf.Max değeri orada durdurur ve bitiş yalnızca bir kez gerçekleşmelidir. Bu fitil, oyuncuya bir bombayı etkisiz hâle getirmesi için 5 saniye verir:
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 yukarı yuvarlar; geri sayımda istenen de budur: ilk saniyenin tamamında 5 gösterir (4.99, 5'e yuvarlanır), son saniye boyunca 1 gösterir ve yalnızca süre dolduğunda 0 gösterir. (int)fuse, 4.99'u 4'e yuvarlayıp bomba hâlâ işlerken son saniyenin tamamında 0 gösterirdi; Mathf.RoundToInt ise son yarım saniyede 0 gösterirdi. Dakika ve saniye olarak gösterilen daha uzun bir geri sayımda da aynı kural geçerlidir: önce süreyi tam saniyelere yukarı yuvarla, sonra bunları biçimlendir.
Erken return, ekranda BOOM yazısının kalmasını sağlar: bu olmazsa sonraki karede üzerine Fuse: 0 yazılır. Metnin ayrıca bir rengi vardır ve fuseText.color = Color.red onu kırmızıya çevirir.
Görev
KolayParkmetre, ödenen süreyi geri sayar. ParkingMeter.cs içindeki Update() metodunu yaz (sahne meterText bağlantısını yapar):
timeLeft75 saniyeden başlar (Inspector'da ayarlanır) ve her karede azalır; asla 0'ın altına düşmez.meterText, kalan süreyi dakika ve saniye olarak, saniyeye yukarı yuvarlayarak gösterir: 75'ten 74.01'e kadar1:15gösterir; 0.4 saniye kaldığında ise0:01gösterir.- Space tuşu bir jeton ekler: 30 saniye daha, ancak
maxTimedeğerini (120,2:00olarak gösterilir) asla aşmaz. - Süre 0 olduğunda metinde kırmızı renkte (
Color.red)EXPIREDyazar. Bundan sonra sayaç 0'da kalır ve artık jeton eklenemez.
Play'e bas, birkaç jeton ekle, ardından Check'e bas.
Kendin dene
using UnityEngine;
using TMPro;
public class ParkingMeter : MonoBehaviour
{
public TMP_Text meterText;
public float timeLeft = 60f;
public float maxTime = 120f;
void Update()
{
// timeLeft değerini geri say ve dakika ile saniye olarak göster; Space 30 saniye ekler
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar