Menu
CoddyTech

Ağır Çekim

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 34 / 56.

0 ile 1 arasındaki bir Time.timeScale değeri ağır çekimdir. 0.25 değerinde Time.deltaTime, gerçek kare süresinin dörtte biridir; bu nedenle speed * Time.deltaTime ile hareket ettirilen bir araba, her gerçek saniyede mesafenin dörtte birini kateder; Rigidbody’ler hızlarının dörtte biriyle uçar ve düşer, WaitForSeconds(1f) ise gerçek zamanda 4 saniye sürer. 1’in üzerinde oyun hızlı çalışır: 2, iki kat hız demektir.

Fizik için bir satır daha gerekir. Her fizik adımı oyunu hâlâ Time.fixedDeltaTime kadar, yani 0.02 oyun saniyesi ilerletir ve 0.25 değerinde bu adımlar gerçek zamanda 0.08 saniye sürer: FixedUpdate() gerçek saniyede yalnızca 12.5 kez çalışır; dolayısıyla cisimler her beş karede bir hareket eder ve takılır. Adım süresini aynı oranda küçült ve ardından her iki değeri de eski hâline getir; çünkü Unity, fixedDeltaTime değerini kendiliğinden hiçbir zaman sıfırlamaz. Bu betik, Space basılı tutulurken oyunu yavaşlatır:

float normalStep;

void Awake()
{
    normalStep = Time.fixedDeltaTime;   // Yeni bir projede 0.02
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Time.timeScale = 0.25f;
        Time.fixedDeltaTime = normalStep * Time.timeScale;
    }
    if (Input.GetKeyUp(KeyCode.Space))
    {
        Time.timeScale = 1f;
        Time.fixedDeltaTime = normalStep;
    }
}

Daha küçük adımla fizik gerçek saniyede yine 50 kez adım atar ve her adım oyun zamanının dörtte birini kapsar; böylece ağır çekim akıcı kalır. Adım oyun saniyeleri cinsindendir; bu nedenle Time.deltaTime kullanan FixedUpdate() içindeki kod, değiştirilmeden çalışmaya devam eder.

challenge icon

Görev

Orta

Bir kuyruklu yıldız gökyüzünü geçer ve Space onu soldan fırlatır (Launcher.cs, hazır). Yolunda SlowZone alanından, bir tetikleyici kutudan geçer ve uçuşunun bu bölümünün ağır çekimde oynatılması gerekir. SlowZone.cs dosyasını yaz:

  • Bir şey bölgeye girdiğinde oyun zamanı slowScale değerinde (Inspector'da 0.4) çalışır ve fizik adımı 0.02'den aynı oranda küçülür; böylece kuyruklu yıldız akıcı biçimde hareket etmeye devam eder.
  • Bölgeden çıktığında zaman yeniden normal hızda çalışır ve fizik adımı tekrar 0.02 olur.

Play'e bas, Space tuşuna basıp kuyruklu yıldızın içinden geçişini izle, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class SlowZone : MonoBehaviour
{
    public float slowScale = 0.4f;

    // Bölgenin içinde bir şey varken yavaş çekim
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler