Menu
CoddyTech

Jeda dengan timeScale

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 34 dari 60.

Time.timeScale menentukan kecepatan waktu game: 1 berarti kecepatan normal dan 0 menghentikannya. Saat nilainya 0, Time.deltaTime bernilai 0, jadi semua gerakan yang ditulis sebagai speed * Time.deltaTime akan terhenti. FixedUpdate() tidak lagi dipanggil, sehingga Rigidbody melayang di udara, dan WaitForSeconds serta Invoke menunggu karena keduanya menghitung waktu game. Skrip ini mengaktifkan atau menonaktifkan jeda melalui tombol yang daftar On Click-nya memanggil TogglePause, lalu menampilkan panel selama jeda:

public class PauseToggle : MonoBehaviour
{
    public GameObject pausePanel;
    bool paused;

    public void TogglePause()
    {
        paused = !paused;
        Time.timeScale = paused ? 0f : 1f;
        pausePanel.SetActive(paused);
    }
}

Tidak semua hal berhenti. Update() dan LateUpdate() tetap dipanggil setiap frame, dengan Time.deltaTime bernilai 0. yield return null dalam coroutine tetap dilanjutkan pada frame berikutnya, dan UI tetap menerima klik. Karena itu, tombol tetap bisa mengakhiri jeda. Tombol keyboard juga tetap dibaca: katak yang melompat saat tombol Space ditekan dalam Update() akan menangkap tekanan tombol selama jeda dan melompat pada langkah fisika pertama setelah jeda berakhir. Skripnya melewatkan pembacaan tombol saat waktu berhenti:

void Update()
{
    if (Time.timeScale == 0f) return;   // dijeda: abaikan tombol-tombolnya
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.AddForce(Vector3.up * jump, ForceMode.Impulse);
    }
}

Time.timeScale berlaku untuk seluruh game, bukan hanya satu scene: jika kamu memuat scene lain saat nilainya 0, scene baru akan dimulai dalam keadaan jeda. Tombol menu yang memulai ulang atau keluar dari level akan mengaturnya kembali ke 1 terlebih dahulu.

challenge icon

Tantangan

Sedang

Beri lapangan tenis menu jeda. Scene ini menghubungkan tombol Jeda dan Lanjutkan.

  1. Di PauseMenu.cs, Pause() mengatur Time.timeScale = 0f; dan memanggil panel.SetActive(true);.
  2. Resume() mengatur Time.timeScale = 1f; dan memanggil panel.SetActive(false);.
  3. Di BallMachine.cs, tambahkan if (Time.timeScale == 0f) return; di atas pemeriksaan Space dalam Update().

Tekan tombol “Main”, servis bola, lalu jeda: bola akan menggantung di udara. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;

public class PauseMenu : MonoBehaviour
{
    public GameObject panel;

    public void Pause()
    {
        // Hentikan waktu permainan dan tampilkan panel
    }

    public void Resume()
    {
        // Waktu permainan kembali berjalan dengan kecepatan normal, panel disembunyikan
    }
}

Semua pelajaran di Membangun Game Sungguhan

Latihan sendiri: Playground Unity