Question IEnumerator / Coroutine

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Warcza
Messages : 160
Inscription : 18 Fév 2016 20:49

Question IEnumerator / Coroutine

Message par Warcza » 16 Déc 2016 16:06

Bonjour

J'ai une petite question qui est peut être stupide :roll: , lorsque j'utilise par exemple un IEnumerator avec dedans un Yield return new WaitForSeconds de 3s on va dire.

Est-il possible de savoir combien de temps il reste avant d'être à 3s, sans à avoir recours à la classe Time pour bidouiller un calcule ?

Merci !
(╯°□°)╯︵ ┻━┻

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Question IEnumerator / Coroutine

Message par boubouk50 » 16 Déc 2016 16:23

Ça ne me semble pas être possible. Le but de la classe est d'attendre pas de compter le temps.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Warcza
Messages : 160
Inscription : 18 Fév 2016 20:49

Re: Question IEnumerator / Coroutine

Message par Warcza » 16 Déc 2016 16:28

Okk, tempis ;s.

Merci !
(╯°□°)╯︵ ┻━┻

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Question IEnumerator / Coroutine

Message par boubouk50 » 16 Déc 2016 16:35

Tu peux facilement faire une boucle while qui attend la fin de la frame (WaitForEndOfFrame ())et récupère le deltatime pour compter le temps:

Code : Tout sélectionner

float remainingTime = 3f; //ici le temps d'attente
while (remainingTime > 0f)
{
	yield return new WaitForEndOfFrame (); //ou bien yield return null;
	remainingTime -= Time.deltaTime; //Cette variable contient le temps d'attente
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Warcza
Messages : 160
Inscription : 18 Fév 2016 20:49

Re: Question IEnumerator / Coroutine

Message par Warcza » 16 Déc 2016 16:51

ah ! j'y avais pas du tout pensé :shock: , merci en tout cas
(╯°□°)╯︵ ┻━┻

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Question IEnumerator / Coroutine

Message par zugsoft » 16 Déc 2016 17:43

Mes recommandations :

1er ne jamais créer d'objet dans une boucle, tu vas allouer de la mémoire a chaque boucle et a la fin de ta boucle mettre ton objet dans le garbage, ce qui va avoir pour conséquence de ralentir Unity de manière aléatoire à chaque fois que Unity videra son Garbage.

Code : Tout sélectionner

float remainingTime = 3f; //ici le temps d'attente
WaitForEndOfFrame _waitEOF = new WaitForEndOfFrame ();
while (remainingTime > 0f)
{
   yield return _waitEOF ; //ou bien yield return null;
   remainingTime -= Time.deltaTime; //Cette variable contient le temps d'attente
}
2em si tu peux te passer des Coroutine c'est mieux, essaye de tout mettre dans un Update, mais tout dépend du traitement de ta Coroutine.

3em si tu dois faire des calculs avec des boucles, utilise des Threads, car les Coroutine et les Update ne sont traités que par un seul coeur.
Moon RTS

Warcza
Messages : 160
Inscription : 18 Fév 2016 20:49

Re: Question IEnumerator / Coroutine

Message par Warcza » 20 Déc 2016 17:47

Ok, je note thanks
(╯°□°)╯︵ ┻━┻

Répondre

Revenir vers « Scripting »