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.
Görev
OrtaBir 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ı
slowScaledeğ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
}
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
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar