Menu
CoddyTech

InvokeRepeating, CancelInvoke

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 22 dari 63.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) memanggil Blink untuk pertama kali setelah 0.5 detik, lalu memanggilnya lagi setiap 0.5 detik sampai dibatalkan. Angka pertama adalah jeda sebelum pemanggilan pertama, angka kedua adalah jeda antar-pemanggilan. CancelInvoke(nameof(Blink)) menghentikannya, sedangkan CancelInvoke() tanpa nama menghentikan semua Invoke yang telah dijadwalkan oleh script.

Lampu peringatan ini berkedip sampai tombol Space ditekan, lalu tetap menyala:

Light lamp;

void Start()
{
    lamp = GetComponent<Light>();
    InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}

void Blink()
{
    lamp.enabled = !lamp.enabled;
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CancelInvoke(nameof(Blink));
        lamp.enabled = true;
    }
}

Timer dari bab tentang pemunculan objek juga bisa melakukan hal yang sama dengan field float dan pemeriksaan di Update(). Dengan InvokeRepeating, Unity mencatat waktunya dan melakukan pemanggilan. Pemanggilan InvokeRepeating diletakkan di Start(): jika diletakkan di Update(), pemanggilan berulang baru akan dijadwalkan pada setiap frame.

challenge icon

Tantangan

Mudah

Geyser melempar bola yang berada di atasnya ke udara. Script-nya memiliki ball, power, dan hitungan eruptions. Buat agar geyser meletus sesuai jadwal:

  • Letusan pertama terjadi 1 detik setelah Play, lalu satu letusan setiap 2 detik.
  • Letusan adalah method bernama Erupt: method ini menambahkan 1 ke eruptions, mendorong bola ke atas dengan ball.AddForce(Vector3.up * power, ForceMode.Impulse), lalu mencatat Eruption 1, Eruption 2, dan seterusnya.
  • Setelah letusan ketiga, geyser berhenti selamanya.

Tekan Play dan amati bola, lalu tekan Periksa.

Coba sendiri

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // Mulai erupsi 1 detik setelah Play, lalu setiap 2 detik
    }

    // Erupt(): hitung erupsi, dorong ball ke atas, lalu catat di log; berhenti setelah erupsi ketiga
}
quiz iconUji dirimu

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

Semua pelajaran di Fisika dan Gameplay