Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Park sayacının ödenen süreyi geri saymasını sağla.

  1. Update() içinde, timeLeft değerinden Time.deltaTime çıkar; değer hiçbir zaman 0'ın altına düşmesin ve Mathf.CeilToInt(timeLeft) değerini dakika ve saniye olarak göster: 1:15.
  2. Boşluk tuşu 30 saniye ekler; süre en fazla maxTime (2:00) olur.
  3. Süre 0 olduğunda Color.red renginde EXPIRED göster. Böyle kalmasını sağlamak için Update() metodunun başına if (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

Kendi başına pratik yap: Unity playground