Votre première coroutine
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 23 sur 63.
Update() doit se terminer à chaque image, il ne peut donc pas attendre. Une coroutine le peut : c’est une méthode qui se met en pause et reprend plus tard, exactement là où elle s’est arrêtée. Elle renvoie IEnumerator, qui nécessite using System.Collections;, et chaque yield return qu’elle contient correspond à une pause. En C#, yield return permet à une méthode de fournir ses valeurs une à une ; Unity demande la suivante lorsque l’attente est terminée. yield return null attend une image, et yield return new WaitForSeconds(3f) attend 3 secondes.
StartCoroutine(Cycle()) en démarre une. Ce feu de circulation passe au vert, puis au jaune 3 secondes plus tard, et au rouge après une seconde supplémentaire :
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 exécute immédiatement la coroutine jusqu’à son premier yield, puis Start() continue ; Unity la reprend après chaque attente, avec ses variables locales dans leur état précédent. Un simple Cycle(); sans StartCoroutine ne fait rien : il crée la méthode en pause puis l’abandonne, et aucune de ses lignes ne s’exécute. Et yield return 3f; ne correspond pas à une attente de 3 secondes : Unity ne reconnaît que les objets d’attente tels que WaitForSeconds et traite toute autre valeur comme une image.
Défi
FacileLes pics attendent sous le sol. Fais déclencher le piège en appuyant sur Espace avec une coroutine nommée Spring :
- Immédiatement : affiche
Clickdans le journal. - Une demi-seconde plus tard : les pics bondissent de 1 unité vers le haut.
- 2 secondes après : ils redescendent de 1 unité.
Appuie sur Jouer, appuie sur Espace et observe, puis clique sur Vérifier.
Essayez vous-même
using System.Collections;
using UnityEngine;
public class SpikeTrap : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Déclencher le piège avec une coroutine
}
}
// IEnumerator Spring() : cliquer, attendre 0.5 s, monter de 1 unité, attendre 2 s, descendre de 1 unité
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Physique et gameplay
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser