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.
Tantangan
MudahSpikes 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
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Fisika dan Gameplay
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine PertamamuPerulangan dalam CoroutineMenghentikan CoroutineRangkuman: Hitung Mundur2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa Hancur