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.
Tantangan
MudahBuat perangkap paku melompat saat kamu menekan Space dengan coroutine.
- Tulis
IEnumerator Spring(): catatClick,yield return new WaitForSeconds(0.5f);, lalutransform.position += Vector3.up;. - Kemudian tunggu 2 detik dengan cara yang sama, lalu turunkan kembali sebesar
Vector3.up. - Di dalam
ifuntuk Space, mulai coroutine denganStartCoroutine(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
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine PertamamuPerulangan dalam CoroutineMenghentikan CoroutineRangkuman: Hitung Mundur10Proyek: Kabur dari Arena
ArenaPara Pemburu2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa HancurLatihan sendiri: Playground Unity