Menu
CoddyTech

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.

challenge icon

Görev

Orta

Tenis 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.cs içinde, oyun duraklatıldığında Space tuşu top atmamalıdır. Dönüşte değişiklik gerekmez: dönüş Time.deltaTime ile 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
    }
}
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