Menu
CoddyTech

Jeda dengan timeScale

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 33 dari 56.

Time.timeScale menentukan kecepatan waktu dalam game: 1 berarti kecepatan normal dan 0 menghentikannya. Saat nilainya 0, Time.deltaTime bernilai 0, jadi semua gerakan yang ditulis sebagai speed * Time.deltaTime 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, serta menampilkan panel saat game dijeda:

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, coroutine yang menggunakan yield return null tetap berlanjut pada frame berikutnya, dan UI tetap menerima klik. Karena itu, tombol bisa mengakhiri jeda. Tombol keyboard juga tetap terbaca: katak yang melompat saat tombol Spasi ditekan dalam Update() akan menerima input itu selama jeda dan melompat pada langkah fisika pertama setelah jeda berakhir. Skripnya mengabaikan 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 dijeda. Tombol menu yang memulai ulang atau keluar dari level akan mengatur nilainya kembali ke 1 terlebih dahulu.

challenge icon

Tantangan

Sedang

Mesin bola di lapangan tenis berputar dengan tombol panah kiri dan kanan, lalu menyervis bola saat kamu menekan Space (BallMachine.cs). Tambahkan menu jeda ke lapangan di PauseMenu.cs. Scene menghubungkan tombol Pause ke Pause() dan tombol Resume, yang berada di PausePanel tersembunyi, ke Resume(); di Inspector, masukkan panel ke panel.

  • Pause() menghentikan waktu game dan menampilkan panel.
  • Resume() mengembalikan waktu game ke kecepatan normal dan menyembunyikan panel.
  • Di BallMachine.cs, Space tidak boleh menyervis bola saat game dijeda. Gerakan berputar tidak perlu diubah: gerakan itu ditulis dengan Time.deltaTime.

Tekan Play, servis bola, lalu jeda game saat bola masih di udara, kemudian tekan Periksa.

Coba sendiri

using UnityEngine;

public class PauseMenu : MonoBehaviour
{
    public GameObject panel;

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

    public void Resume()
    {
        // Kembalikan waktu permainan ke kecepatan normal dan sembunyikan panel
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Membangun Game Sungguhan