Bonjour
J'ai une petite question qui est peut être stupide , 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 !
Question IEnumerator / Coroutine
Question IEnumerator / Coroutine
(╯°□°)╯︵ ┻━┻
- boubouk50
- ModoGenereux
- Messages : 6247
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Question IEnumerator / Coroutine
Ç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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- boubouk50
- ModoGenereux
- Messages : 6247
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Question IEnumerator / Coroutine
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Question IEnumerator / Coroutine
ah ! j'y avais pas du tout pensé , merci en tout cas
(╯°□°)╯︵ ┻━┻
Re: Question IEnumerator / Coroutine
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.
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.
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
}
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