timeScale ile Duraklatma
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 33 / 56.
Time.timeScale, oyun zamanının ne kadar hızlı aktığını belirler: 1 normal hızdır, 0 ise zamanı durdurur. Değer 0 olduğunda Time.deltaTime da 0 olur; bu nedenle speed * Time.deltaTime olarak yazılan tüm hareketler durur. FixedUpdate() artık çağrılmaz, bu yüzden Rigidbody'ler havada asılı kalır; oyun zamanını saydıkları için WaitForSeconds ve Invoke da bekler. Bu betik, On Click listesi TogglePause metodunu çağıran bir düğmeyle duraklatmayı açıp kapatır ve oyun duraklatıldığında bir panel gösterir:
public class PauseToggle : MonoBehaviour
{
public GameObject pausePanel;
bool paused;
public void TogglePause()
{
paused = !paused;
Time.timeScale = paused ? 0f : 1f;
pausePanel.SetActive(paused);
}
}Her şey durmaz. Update() ve LateUpdate() her karede çağrılmaya devam eder; bu sırada Time.deltaTime 0'dır. Coroutine içindeki yield return null yine sonraki karede geri döner ve kullanıcı arayüzü tıklamaları almaya devam eder; düğme bu sayede duraklatmayı bitirebilir. Tuşlar da okunmaya devam eder: Update() içinde Space tuşuna basıldığında zıplayan bir kurbağa, duraklatma sırasında tuşa basıldığını algılar ve duraklatma bittikten sonraki ilk fizik adımında sıçrar. Betiği, zaman durduğunda tuşları yok sayar:
void Update()
{
if (Time.timeScale == 0f) return; // duraklatıldı: tuşları yok say
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
}
}Time.timeScale bir sahneye değil, oyunun tamamına aittir: değeri 0 iken başka bir sahne yüklersen yeni sahne duraklatılmış olarak başlar. Bir seviyeyi yeniden başlatan veya oyundan çıkan menü düğmesi, önce değeri tekrar 1 yapar.
Görev
OrtaTenis kortundaki top makinesi sol ve sağ ok tuşlarıyla döner ve Space tuşuna basıldığında top atar (BallMachine.cs). Kort için PauseMenu.cs içinde bir duraklatma menüsü oluştur. Sahnede Pause düğmesi Pause() işlevine, gizli PausePanel üzerindeki Resume düğmesi ise Resume() işlevine bağlanmıştır; Inspector'da panel panel alanına atanmıştır.
Pause()oyun süresini durdurur ve paneli gösterir.Resume()oyun süresini normal hıza döndürür ve paneli gizler.BallMachine.csiçinde, oyun duraklatıldığında Space tuşu top atmamalıdır. Dönüşte değişiklik gerekmez: dönüşTime.deltaTimeile yazılmıştır.
Play'e bas, bir top at ve top havadayken oyunu duraklat, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class PauseMenu : MonoBehaviour
{
public GameObject panel;
public void Pause()
{
// Oyun zamanını durdur ve paneli göster
}
public void Resume()
{
// Oyun zamanı yeniden normal hızda, panel gizli
}
}
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