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.
Tantangan
SedangBeri lapangan tenis menu jeda. Scene ini menghubungkan tombol Jeda dan Lanjutkan.
- Di
PauseMenu.cs,Pause()mengaturTime.timeScale = 0f;dan memanggilpanel.SetActive(true);. Resume()mengaturTime.timeScale = 1f;dan memanggilpanel.SetActive(false);.- Di
BallMachine.cs, tambahkanif (Time.timeScale == 0f) return;di atas pemeriksaan Space dalamUpdate().
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
2Tombol dan Layar
Tombol dan onClickLambdaMenghubungkan di InspectorPanel Aktif dan NonaktifBilah KesehatanRangkuman: Toko Upgrade5Menyimpan dengan PlayerPrefs
Simpan AngkaMuat dengan Nilai DefaultSkor TertinggiSimpan PengaturanUlasan: Koin di BankLatihan sendiri: Playground Unity