7 Ağustos 2018 Salı

Unity Time.deltaTime nedir?

Unityde Time.deltaTime bilgisayarınızın bir önceki frame'i tamamlaması için gereken süreyi veren salt okunur bir değişkendir.

Ne İşe Yarar?


Unityde normalde çalıştırdığınız fonksiyonlar bilgisayarın çalışma hızına endekslidir.deltaTime ile performanstan bağımsız olarak fonksiyon çalıştırabilirsiniz. Örneğin bir nesneyi ileriye hareket ettirecekseniz deltaTime kullanmadan hareket ettireceğiniz bu cisim yavaşlayıp hızlanacaktır çünkü ileri gitme komutu bilgisayarınız hızlı çalıştıkça hızlıca, yavaş çalıştıkça yavaşça verilecektir.
deltaTime ile sadece zamanı baz alarak çalıştıracağınız komutu aynı aralıklarla çalıştırırsınız.

Mavi top Time.deltaTime ile sabitlenen

Peki Nasıl Çalışır?

Time.deltaTime aslında bilgisayarınızın aldığı frame sayısını gösterir.(çalışma hızını) Ancak bunu bizim bildiğimiz FPS(Saniyelik frame sayısı) türünden vermiyor.Son 2 frame arasındaki zamanı veriyor.
Bilgisayarınızın 10 FPS aldığını düşünelim. time.deltaTime'ı okuyunca 1/10 = 0.1 döndürecektir.
Time.deltaTime'ı tekrar okuyunca çalışma hızı 5 FPS'e düşerse(diğer frame geç gelirse)  time.deltaTime 0.2 döndürecektir.

Bizim de bir küp nesnesini hareket ettirmek istediğimizi varsayalım. Küp nesnesine şu komutu verelim = transform.translate(10*Time.deltaTime,0,0)  (10 metre ileri git)
Küp birinci okumada 10*0.1 = 1 metre ileri gidecektir.
Küp ikinci okumada 10*0.2 = 2 metre ileri gidecektir.
Bu sayede eşit hızla ileri gitmiş olacak.

Neden eşit hızla ileri gittiklerini anlayamadıysanız şöyle açıklayayım: delta.Time'ı ilk okumamızda bilgisayarımız hızlı çalıştı ve 0.1 döndürdü ancak ikinci okumamızda yavaşladı ve 0.2 döndürdü,
bizde bilgisayarımızın çalışma hızı yarıya düştüğü için ileri gitme komutunu 2 kat yüksek değerle verdik.bunu Time.deltaTime ile yaptık.


Özetle Time.deltaTime komutlarımızı bilgisayarımız hızlı çalıştıkça daha düşük değerle vermemizi, bilgisayarımız yavaş çalıştıkça daha yüksek değerle vermemizi sağlayarak ortalama olarak aynı değerde çalışmasını sağlar.
Buna örnek olarak: Bir yarış oyununda hızlı bilgisayarla yavaş bilgisayarın yarıştığını düşünelim. Time.deltaTime olmasaydı İkisinin de eşit hızla gitmesi gerekirken her framede ileri gitme komutu verilmesinden dolayı daha fazla frame alan hızlı bilgisayar yarışı kazanır.