Menu
CoddyTech

Coroutine Pertamamu

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

Update() harus selesai pada setiap frame, jadi tidak bisa menunggu. Coroutine bisa: ini adalah method yang berhenti sejenak lalu berlanjut nanti, tepat di tempat ia berhenti. Coroutine mengembalikan IEnumerator, yang memerlukan using System.Collections;, dan setiap yield return di dalamnya adalah jeda. Di C#, yield return membuat method yang memberikan nilai satu per satu; Unity meminta nilai berikutnya saat waktu tunggu selesai. yield return null menunggu satu frame, sedangkan yield return new WaitForSeconds(3f) menunggu 3 detik.

StartCoroutine(Cycle()) memulai coroutine. Lampu lalu lintas ini berubah menjadi hijau, lalu kuning 3 detik kemudian, dan merah setelah satu detik lagi:

using System.Collections;
using UnityEngine;

public class TrafficLight : MonoBehaviour
{
    Renderer lamp;

    void Start()
    {
        lamp = GetComponent<Renderer>();
        StartCoroutine(Cycle());
    }

    IEnumerator Cycle()
    {
        lamp.material.color = Color.green;
        yield return new WaitForSeconds(3f);
        lamp.material.color = Color.yellow;
        yield return new WaitForSeconds(1f);
        lamp.material.color = Color.red;
    }
}

StartCoroutine langsung menjalankan coroutine hingga yield pertamanya, lalu Start() berlanjut; Unity melanjutkan coroutine setelah setiap waktu tunggu, dengan variabel lokal seperti sebelumnya. Cycle(); tanpa StartCoroutine tidak melakukan apa pun: pemanggilan itu membuat method yang dijeda lalu membuangnya, sehingga tidak satu baris pun dijalankan. Dan yield return 3f; bukanlah waktu tunggu 3 detik: Unity hanya mengenali objek waktu tunggu seperti WaitForSeconds dan memperlakukan nilai lain sebagai satu frame.

challenge icon

Tantangan

Mudah

Spikes menunggu di bawah lantai. Buat Space memicu perangkap dengan coroutine bernama Spring:

  • Langsung: catat Click.
  • Setengah detik kemudian: spikes melompat naik 1 unit.
  • 2 detik setelah itu: spikes turun kembali 1 unit.

Tekan Play, tekan Space dan amati, lalu Check.

Coba sendiri

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Aktifkan jebakan dengan coroutine
        }
    }

    // IEnumerator Spring(): Klik, tunggu 0.5 s, naik 1 unit, tunggu 2 s, turun 1 unit
}
quiz iconUji dirimu

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

Semua pelajaran di Fisika dan Gameplay