Menu
CoddyTech

Coroutine Pertamamu

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 24 dari 71.

Update() harus selesai di setiap frame, jadi tidak bisa menunggu. Coroutine bisa: coroutine adalah method yang berhenti sejenak lalu melanjutkan dari titik terakhirnya. Coroutine mengembalikan IEnumerator, yang memerlukan using System.Collections;, dan setiap yield return di dalamnya adalah jeda. Dalam C#, yield return membuat method yang memberikan nilai satu per satu; Unity meminta nilai berikutnya setelah 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 1 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() melanjutkan; Unity melanjutkannya kembali setelah setiap waktu tunggu, dengan variabel lokal seperti sebelumnya. Pemanggilan Cycle(); tanpa StartCoroutine tidak melakukan apa-apa: pemanggilan itu membuat method yang dijeda lalu membuangnya, dan tidak satu baris pun dijalankan. Selain itu, yield return 3f; bukan waktu tunggu 3 detik: Unity hanya mengenali objek waktu tunggu seperti WaitForSeconds dan memperlakukan nilai lainnya sebagai satu frame.

challenge icon

Tantangan

Mudah

Buat perangkap paku melompat saat kamu menekan Space dengan coroutine.

  1. Tulis IEnumerator Spring(): catat Click, yield return new WaitForSeconds(0.5f);, lalu transform.position += Vector3.up;.
  2. Kemudian tunggu 2 detik dengan cara yang sama, lalu turunkan kembali sebesar Vector3.up.
  3. Di dalam if untuk Space, mulai coroutine dengan StartCoroutine(Spring());.

Tekan tombol “Main” lalu tekan Space: paku-pakunya melompat ke atas, lalu turun kembali. Setelah itu, tekan tombol “Periksa”.

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
}

Semua pelajaran di Fisika dan Gameplay

Latihan sendiri: Playground Unity