Les Coroutines sont des fonctions qui peuvent être exécutées en parallèle du cycle principal d’exécution du jeu...


La version vidéo de ce tutoriel n’est actuellement pas disponible dans cette langue. Vous pouvez regarder ci-dessous la version en anglais avec des sous-titres ; sous la vidéo, vous trouverez la transcription traduite en français.


Transcription de la vidéo

Bonjour à tous !

Bienvenue dans ce tutoriel de base sur l’utilisation des Coroutines dans Unity.

Les Coroutines sont des fonctions qui peuvent être exécutées en parallèle du cycle principal d’exécution du jeu.

Dans ce tutoriel, j’utiliserai un exemple pratique pour expliquer le concept et présenter également la fonction WaitForSeconds, qui permet d’attendre l’exécution d’une opération pendant un nombre de secondes défini.

Ce tutoriel suppose que vous avez une compréhension de base de la programmation en C# dans Unity. Il a été enregistré avec la version 2022 de Unity, mais les Coroutines sont disponibles dans de nombreux langages de programmation et dans des versions antérieures de Unity.

Notre objectif est de faire en sorte que le canon tire automatiquement un Prefab de boulet de canon, une simple sphère noire, toutes les 3 secondes jusqu’à ce qu’un événement externe interrompe cette routine.

Dans ce cas, l’événement externe sera l’appui de l’utilisateur sur la touche S, pour Stop.

Pour commencer, nous devons créer un script pour le canon et l’appeler « autoshoot ».

À l’intérieur de la classe principale, je définis trois variables pour spécifier le point de départ du boulet par rapport au canon :

public GameObject spawnPrefab;

Je lierai le prefab du boulet de canon dans l’Unity Editor à cette variable publique.

Vector3 spawnPosition;

Quaternion spawnRotation;

J’ai calculé ce point et l’orientation initiale, donc j’initialise ces deux valeurs dans la fonction Start :

spawnPosition = transform.position + new Vector3(-1.2f, 1.8f, 0f);

spawnRotation = Quaternion.Euler(-10f, -90f, 0f);

Il est évident que nous devons implémenter une boucle qui se répète indéfiniment, sauf si un événement externe l’interrompt, et qui inclut une instruction de délai de 3 secondes avant de passer à l’itération suivante.

REMARQUE : le prefab du boulet de canon contient un script qui, au démarrage, applique une poussée initiale vers l’avant au boulet et programme la destruction automatique de l’objet après 3 secondes, afin de ne pas remplir l’univers virtuel ni la mémoire du système avec des boulets de canon.

L’instruction WaitForSeconds nous permet de mettre l’exécution en pause pendant une durée spécifiée, qui dans notre cas est de 3 secondes.

Nous devons maintenant créer un bloc WHILE pour exécuter la boucle principale, que je suis en train d’écrire dans un espace vide du script :

while(true) {

GameObject cannonBall = Instantiate(spawnPrefab, spawnPosition, spawnRotation, null);

yield return new WaitForSeconds(3);

}

Alors, où devons-nous placer ce bloc WHILE ?

Il ne peut pas être placé dans Start, car nous ne pouvons pas y utiliser yield WaitForSeconds. De plus, le placer dans Update ne permettrait pas d’introduire un délai, puisque Update est appelée à chaque frame du jeu.

Nous devons donc créer une fonction appelée « shoot » qui retourne le type IEnumerator et qui inclut le bloc WHILE.

Cette fonction nous permettra de démarrer une Coroutine à l’aide de l’instruction StartCoroutine avec le nom de la fonction passé en paramètre entre guillemets.

Puisque le canon doit commencer à tirer immédiatement, nous écrivons :

StartCoroutine("shoot");

dans Start, immédiatement après l’initialisation de spawnPosition et spawnRotation.

Enregistrons le script et allons dans l’éditeur pour tester le script défini jusqu’à ce point.

Afin de pouvoir arrêter ou redémarrer la Coroutine, revenons au script et ajoutons deux instructions.

Nous pouvons arrêter la Coroutine en vérifiant si la touche S est enfoncée, puis en appelant la fonction StopCoroutine avec la Coroutine « shoot » en paramètre.

De la même manière, nous pouvons redémarrer la Coroutine en vérifiant si la touche R est enfoncée et en appelant la fonction StartCoroutine avec « shoot » en paramètre.

Écrivons donc, dans Update :

if(Input.GetKeyDown(KeyCode.S)) StopCoroutine("shoot");

if(Input.GetKeyDown(KeyCode.R)) StartCoroutine("shoot");

Après avoir ajouté ces instructions, enregistrons le script et revenons dans l’Unity Editor pour l’essayer.

C’est tout pour ce court tutoriel. J’espère qu’il vous a été utile. À bientôt !

Rechercher dans les Tutoriels

Saisissez une expression ou plusieurs mots-clés séparés par des virgules.

Ce site est personnel et ne constitue pas un canal de vente. Les pages consacrées aux modèles 3D documentent une sélection de mes travaux et ne contiennent ni offres, ni prix, ni procédures d’achat, ni liens commerciaux. Je n’accepte actuellement aucune demande de travaux personnalisés, de conseil ou d’autres collaborations professionnelles.


POLITIQUE GENERALE DE CONFIDENTIALITE ET D'UTILISATION DES COOKIES