DeltaTime nedir? Ne değildir?
Merhabalar. Bu yazımda deltaTime nedir, neden kullanılır gibi sorulara cevap vereceğim.
DeltaTime nedir?
DeltaTime, bir önceki frame'den bu frame'e geçen süre. Bir değişkendir yani. Bir bilgisayar saniyede 3 frame alıyorsa, deltaTime şunun gibi oluyor:
1. frame // deltaTime = 0.2
2. frame // deltaTime = 0.3
3. frame // deltaTime = 0.5
Farkettiyseniz 1 saniye sonunda bunların toplamı 1 oldu. Yani olay bu. Bu 3 deltaTime değişkeni birbiri eşit olmak zorunda değil.
Peki biz kaç fps alırsak alalım, nasıl her bilgisayarda aynı derecede işlemler gerçekleşiyor?
Örnek senaryo üzerinden gidelim. Şöyle bir scriptimiz olsun:
Burada bilgisayarımızın 5 fps aldığını düşünelim ve aralarında geçen zaman aynı olsun. Yani 5 frame'de deltaTime = 1/5(0.2) oluyor. speed değişkenimiz 10 idi. Frame frame kontrol edelim neler oluyor:
1. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 2
2. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 4
3. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 6
4. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 8
5. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 10
// karakterimizin pozisyonu 1 saniyede speed kadar artmış oldu.
Şimdi de 2 fps aldığını düşünerek hesaplayalım. speed = 10; player.position=0; deltaTime ise her frame'de 0.5 diye düşünelim. Çünkü 2 frame alıyoruz:
1. frame // player.transform.position.x = player.transform.position.x + 10 * 0.5
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.5 kadar artıyor. Yani 5 arttı. Yeni pozisyon 5
2. frame // player.transform.position.x = player.transform.position.x + 10 * 0.5
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.5 kadar artıyor. Yani 5 arttı. yeni pozisyon 10
// 5 fps'le karşılaştırınca aynı karakterimiz aynı pozisyona gelmiş oldu.
// bu örnekte deltaTime'ı 0.5 diye düşündüm ancak bu çok farklı şeyler olabilir. (0.3, 0.7) (0.2, 0.8) (0.1, 0.9) gibi. İşlem sonucu değişmiyor ancak anlatırken kolay oluyor diye ben aynı kabul ettim.
DeltaTime nedir?
DeltaTime, bir önceki frame'den bu frame'e geçen süre. Bir değişkendir yani. Bir bilgisayar saniyede 3 frame alıyorsa, deltaTime şunun gibi oluyor:
1. frame // deltaTime = 0.2
2. frame // deltaTime = 0.3
3. frame // deltaTime = 0.5
Farkettiyseniz 1 saniye sonunda bunların toplamı 1 oldu. Yani olay bu. Bu 3 deltaTime değişkeni birbiri eşit olmak zorunda değil.
Peki biz kaç fps alırsak alalım, nasıl her bilgisayarda aynı derecede işlemler gerçekleşiyor?
Örnek senaryo üzerinden gidelim. Şöyle bir scriptimiz olsun:
class Object
{
GameObject player; //player position = vector3(0, 0, 0) kabul edelim.
int speed = 10;
void update()
{
player.transform.position.x = player.transform.position.x + speed * deltaTime
}
}
Burada bilgisayarımızın 5 fps aldığını düşünelim ve aralarında geçen zaman aynı olsun. Yani 5 frame'de deltaTime = 1/5(0.2) oluyor. speed değişkenimiz 10 idi. Frame frame kontrol edelim neler oluyor:
1. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 2
2. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 4
3. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 6
4. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 8
5. frame // player.transform.position.x = player.transform.position.x + 10 * 0.2
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.2 kadar artıyor. Yani 2 arttı. Yeni pozisyon 10
// karakterimizin pozisyonu 1 saniyede speed kadar artmış oldu.
Şimdi de 2 fps aldığını düşünerek hesaplayalım. speed = 10; player.position=0; deltaTime ise her frame'de 0.5 diye düşünelim. Çünkü 2 frame alıyoruz:
1. frame // player.transform.position.x = player.transform.position.x + 10 * 0.5
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.5 kadar artıyor. Yani 5 arttı. Yeni pozisyon 5
2. frame // player.transform.position.x = player.transform.position.x + 10 * 0.5
// bu işlemler sonunda karakterimizin pozisyonu 10 * 0.5 kadar artıyor. Yani 5 arttı. yeni pozisyon 10
// 5 fps'le karşılaştırınca aynı karakterimiz aynı pozisyona gelmiş oldu.
// bu örnekte deltaTime'ı 0.5 diye düşündüm ancak bu çok farklı şeyler olabilir. (0.3, 0.7) (0.2, 0.8) (0.1, 0.9) gibi. İşlem sonucu değişmiyor ancak anlatırken kolay oluyor diye ben aynı kabul ettim.
Yorumlar
Yorum Gönder