Unity’de Zamanlayıcı Oluşturma: Time.deltaTime

Unity’de timer oluşturmayı anlattık.
Unity Timer
The primary methods of making a Unity countdown timer

Unity‘de temel bir geri sayım sayacı yapma yöntemi göründüğünden daha basittir.

Kalan süreyi hesaplamak için bir kayan nokta değişkeni oluşturun ve her karede önceki karenin süresini (delta süresi) bu miktardan çıkarın. Örneğin:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Timer : MonoBehaviour

{

    public float timeRemaining = 10;

    void Update()

    {

        if (timeRemaining > 0)

        {

            timeRemaining -= Time.deltaTime;

        }

    }

}

Unity’de bir zamanlayıcı oluşturmanın temel yöntemi budur.

Geri sayım süresini ne kadar belirlediğinize göre zamanlayıcı çalışacaktır.

Muhtemelen bir geri sayım sayacı yapıyorsanız, zamanlayıcı sıfıra ulaştığında bir şeylerin olmasını sağlamak isteyebilirsiniz.

Geri sayım bittiğinde bir eylem nasıl tetiklenir

Önceki örnekte, zamanlayıcının çalışıp çalışmadığını belirli bir süre belirleyerek anlamıştık.

Peki ya zamanlayıcı bittiğinde bir eylemi tetiklemek isterseniz ne yapmanız gerekiyor?

Örneğin, oyunu bitirmek veya zaman göstergesini ayarlamak vb. isteyebilirsiniz. Sonunda hiçbir şey olmazsa geri sayım yapmanın pek bir anlamı kalmıyor. Bunu yapmanın en kolay yolu, else koşuludur. Örneğin:

if (timeRemaining > 0)

{

    timeRemaining -= Time.deltaTime;

}

else

{

    Debug.Log(“Time has run out!”);

}

Bu yöntemin tek bir sorunu var. Zamanlayıcı biter bitmez, else koşulu her karede “doğru” olmaya devam etmekte.

Bu, zamanlayıcı sıfıra ulaştığında tetiklenen herhangi bir eylemin daha sonra her karede de tetikleneceği anlamına gelir. Yani sürekli olarak aynı eylemi tekrarlayacağı anlamına geliyor.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Timer : MonoBehaviour

{

    public float timeRemaining = 10;

    public bool timerIsRunning = false;

    private void Start()

    {

        // Starts the timer automatically

        timerIsRunning = true;

    }

    void Update()

    {

        if (timerIsRunning)

        {

            if (timeRemaining > 0)

            {

                timeRemaining -= Time.deltaTime;

            }

            else

            {

                Debug.Log(“Time has run out!”);

                timeRemaining = 0;

                timerIsRunning = false;

            }

        }

    }

}

Yukarıda gösterdiğim örnek daha kullanışlı, çünkü zamanlayıcının ne zaman başlayacağını manuel olarak kontrol etmenize olanak tanıyor (timerIsRunning’i true olarak ayarlayarak).

Ayrıca, zamanlayıcı sıfıra ulaştığında tetiklenen son eylemin yalnızca bir kez tetiklendiği anlamına da geliyor.

Bittiğinde zamanlayıcıyı sıfıra kitlemeyi unutmayın

Ayrıca, zamanlayıcı sona erdiğinde timeRemaining’i manuel olarak sıfıra ayarladığımı fark edebilirsiniz.

Bunun nedeni, zamanlayıcı durduğunda kalan sürenin neredeyse her zaman negatif bir sayı olacağıdır. Bunun nedeni, zamanın, son karenin süresine eşdeğer olan parçalar halinde çıkarılmasıdır.

Zamanlayıcı bittiğinde sıfıra ayarlanmalı çünkü şu anda bir sorun olmasa da daha sonra zaman değerini görüntülerken sorun yaratabilir.

Bu da bizi bir sonraki soruna getiriyor.

Bir şamandırayı dakika ve saniye cinsinden görüntülenen bir zaman değerine nasıl dönüştürürsünüz?

Unity’de bir zaman değeri dakika ve saniyeye nasıl çevrilir

Basit bir görev gibi görünüyor, ancak Unity’de dakika ve saniye cinsinden bir zaman değeri görüntülemek şaşırtıcı derecede zor olabilir.

Bunun nedeni, bunu yapmanın birçok yolu olmasıdı.

Bu yöntem çok kullanışlı, çünkü zamanı doğru görüntülerken karşılaşabileceğiniz yaygın sorunların çoğunu yalnızca birkaç adımda önlememizi sağlıyor.

Zamanı doğru bir şekilde görüntülemek için, hem dakika hem de saniye, ham zaman değerinden ayrı ayrı hesaplanmalıdır.

Dakikaları hesaplamak için kalan süreyi 60’a bölün, örneğin:

float minutes = Mathf.FloorToInt(timeRemaining / 60);

Saniyeyi hesaplamak için modulo işlemini (%) bu şekilde kullanın.

float seconds = Mathf.FloorToInt(timeRemaining % 60);

Modulo işlemi nedir?

Modulo işlemi, bir sayının diğerine bölünmesinden sonra kalanını dönüştüren bir hesaplama işlevidir.

Bu örnekte modulo, bir tam dakikayı oluşturmayan toplam zaman değerinden saniye sayısını dönüştürmek için kullanılır.

Bir zaman göstergesinin sadece saniyelerini almak için mükemmel yöntemlerden biridir.

Sonuçların değeri değişken olacağından dolayı en büyük tamsayı değerine yuvarlamak için Mathf.FloorToInt kullanmalısınız.

5 dakikada sektörü yakala

Oyun dünyasının gündemini, son raporları ve özel içeriklerini her hafta e-posta kutunuza gönderiyoruz.

    Almak istediğiniz bültenleri seçin:

    Spam yok, dilediğiniz zaman abonelikten çıkabilirsiniz.

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak.

    Related Posts