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 / 60.
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 nedenle Mathf.Max süreyi 0'da 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ımın göstermesi gereken de budur: ilk tam saniye boyunca 5 (4.99, 5'e yuvarlanır), son saniye boyunca 1 ve yalnızca süre dolduğunda 0. (int)fuse, 4.99'u 4'e düşürür ve bomba hâlâ işlerken son saniyenin tamamında 0 gösterir; Mathf.RoundToInt ise son yarım saniyede 0 gösterir. 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 yapılan return, BOOM yazısının ekranda kalmasını sağlar: bu olmazsa sonraki karede üzerine Fuse: 0 yazılır. Bir metnin rengi de vardır ve fuseText.color = Color.red onu kırmızıya çevirir.
Görev
KolayPark sayacının ödenen süreyi geri saymasını sağla.
Update()içinde,timeLeftdeğerindenTime.deltaTimeçıkar; değer hiçbir zaman 0'ın altına düşmesin veMathf.CeilToInt(timeLeft)değerini dakika ve saniye olarak göster:1:15.- Boşluk tuşu 30 saniye ekler; süre en fazla
maxTime(2:00) olur. - Süre 0 olduğunda
Color.redrengindeEXPIREDgöster. Böyle kalmasını sağlamak içinUpdate()metodunun başınaif (timeLeft == 0f) return;ekle.
“Oyna” düğmesine bas ve para at: sayaç 2:00'da durur. Ardından “Kontrol et” düğmesine 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
}
}
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östergesi2Düğ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 ParalarKendi başına pratik yap: Unity playground