Menu
CoddyTech

Waktu Tanpa Skala

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

Game yang dijeda atau diperlambat tetap membutuhkan waktu nyata untuk beberapa hal: menu jeda yang memiliki animasi, hitung mundur sebelum permainan dilanjutkan, dan efek beku yang harus berakhir dengan sendirinya. Time.unscaledDeltaTime adalah waktu nyata sejak frame terakhir, berapa pun nilai Time.timeScale, dan Time.unscaledTime adalah waktu nyata sejak permainan dimulai. Menu jeda ini memutar roda pemuatnya berdasarkan waktu nyata, sehingga roda tetap berputar saat permainan dijeda:

void Update()
{
    wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime);   // setengah putaran per detik, baik saat dijeda maupun tidak
}

Coroutine memiliki pasangan yang sama. WaitForSeconds menghitung waktu permainan, jadi saat Time.timeScale = 0, coroutine tidak akan pernah berakhir; WaitForSecondsRealtime menghitung detik nyata. Coroutine ini dimulai saat menu terbuka dan membuat judul menu berkedip setiap setengah detik:

IEnumerator Blink()
{
    while (true)
    {
        title.SetActive(!title.activeSelf);
        yield return new WaitForSecondsRealtime(0.5f);
    }
}

Gunakan nilai yang diskalakan untuk gameplay, yang seharusnya berhenti saat permainan berhenti, dan nilai yang tidak diskalakan untuk hal-hal yang harus tetap berjalan saat permainan dijeda atau diperlambat: menu, animasinya, dan timer yang mengakhiri jeda. Invoke tidak memiliki versi yang menggunakan waktu nyata: fungsi ini selalu menghitung waktu permainan.

challenge icon

Tantangan

Sedang

Hit stop membuat hantaman berat terasa lebih kuat: seluruh game membeku sesaat saat terjadi benturan. Tombol panah menggerakkan alat penjatuh, dan Space menjatuhkan landasan dari alat itu (Dropper.cs, sudah siap). Tulis Anvil.cs, yang dibawa oleh setiap landasan:

  • Saat landasan menabrak apa pun, bekukan game: Time.timeScale 0.
  • Setelah beberapa detik waktu nyata sesuai freezeTime (0.3 di Inspector), atur kembali ke 1.

Tekan Play, jatuhkan beberapa landasan, lalu tekan Check.

Coba sendiri

using System.Collections;
using UnityEngine;

public class Anvil : MonoBehaviour
{
    public float freezeTime = 0.3f;

    // Jeda permainan selama freezeTime detik waktu nyata saat landasan menghantam sesuatu
}
quiz iconUji dirimu

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

Semua pelajaran di Membangun Game Sungguhan