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.
Tantangan
SedangMesin 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 denganTime.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
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Membangun Game Sungguhan
4Scene dan Level
Muat SceneMulai Ulang LevelLevel BerikutnyaPertahankan Antar-SceneRekap: Pilih Level10Proyek: Platformer 3D
LintasanPlatform Bergerak2Tombol dan Layar
Tombol dan onClickLambdaMenghubungkan di InspectorPanel Aktif dan NonaktifBilah KesehatanRangkuman: Toko Upgrade5Menyimpan dengan PlayerPrefs
Simpan AngkaMuat dengan Nilai DefaultSkor TertinggiSimpan PengaturanUlasan: Koin di Bank