Problème WaitForSeconds()

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
JérémieC.
Messages : 36
Inscription : 16 Juin 2015 17:56

Problème WaitForSeconds()

Message par JérémieC. » 03 Nov 2015 14:57

Bonjour, mon problème est que ma fonction ne s’exécute une seule fois alors qu'elle devrait s’exécuter toutes les 2 secondes

Code : Tout sélectionner

	
	
public float Interval = 2.0f;

void Start () 
{
	StartCoroutine(CircleSpawner());
}
	
IEnumerator CircleSpawner()
{
	yield return new WaitForSeconds(Interval);
	Vector3 circlePos = randPos();

	while (getColliders(circlePos).Length > 0){
		circlePos = randPos();
	}

	if (getColliders(circlePos).Length <= 0){
		GameObject InstCircle = GameObject.Instantiate (MyCircle, circlePos, Quaternion.identity) as GameObject;
	}
}
	
Si quelqu'un à la solution je le remercie :)

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

Re: Problème WaitForSeconds()

Message par boubouk50 » 03 Nov 2015 15:13

Euh, non. Telle qu'elle est programmée elle ne se lance qu'une seule fois, attend 2 secondes et fait un spawn.
Tu dois lancer ta fonction avec InvokeRepeating() avec un intervalle de 2 secondes (donc plus de yield waitforseconds).
Par contre je ne suis pas sur que tu puisses directement lancer une coroutine depuis InvokeRepeating (), il te faudra surement appeler une fonction qui appelle à son tour la coroutine.
"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

JérémieC.
Messages : 36
Inscription : 16 Juin 2015 17:56

Re: Problème WaitForSeconds()

Message par JérémieC. » 03 Nov 2015 15:46

Parce que ce que je trouve bizarre c'est que avec le waitforseconds ça fonctionnais comme je voulais et j'ai juste crée un nouveau script que j'ai relier à mes objets et après ça n'a plus fonctionné. Et le problème avec InvokeRepeating() c'est que je doit mettre le nombre de fois que la fonction va s’exécuter or moi je veux ma fonction s’exécute à l'infini.

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

Re: Problème WaitForSeconds()

Message par boubouk50 » 03 Nov 2015 15:54

Il n'y a rien de bizarre, WaitForSeconds (time) ne fait que attendre, c'est tout. Tu as surement mal interprété son utilité.
Le code que tu as fourni ne spawnera qu'une seule fois. S'il marchait avant, c'est qu'une autre fonction appelait la coroutine, il t'en manque un bout. Ou alors, le script était attaché a ton spawn MyCircle qui quand il spawnait relançait une instance de spawn. (Ce qui semble le plus probable)
"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

JérémieC.
Messages : 36
Inscription : 16 Juin 2015 17:56

Re: Problème WaitForSeconds()

Message par JérémieC. » 03 Nov 2015 16:05

Donc si je veux que ma fonction s’exécute toutes les x secondes mais à l'infinis comment je peux m'y prendre ? Le InvokeRepeating() suffira ?

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: Problème WaitForSeconds()

Message par Iwa » 03 Nov 2015 16:25

http://docs.unity3d.com/ScriptReference ... ating.html

Oui, lit bien la doc et tu verras qu'il te comblera de joie :)
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Problème WaitForSeconds()

Message par Xann_71 » 03 Nov 2015 22:31

Ce que jaime sur ce forum, c'est qu'en venant voir si je peux aider, j'en apprend d'avantage. Merci à vous pour vos infos :).

Du coup si vous me permettez de poser une question au sujet de cette fonction. Dans un jeu j'avais un système d'astéroïdes qui se déplaçaient en réduisant la valeur de Y à chaque update() (mais du coup impossible de mettre pause). Exitse t il une différence de performance dans le code entre gérer cette réduction de Y via l'update() ou via InvokeRepeating()?

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: Problème WaitForSeconds()

Message par Iwa » 04 Nov 2015 10:59

Oui il peut en exister une :

InvokeRepeating se fait tout les x temps. Ce temps là, tu le choisis et il peut être ou très court ou très long.
Un Update est soumis à ton temps de rafraîchissement que tupeux setter toi même (fortement déconseillé sauf si tu sais vraiment ce que tu fais) mais qui dépend aussi de la rapidité de tes frames exécutées, ce n'est donc pas un temps fixe (voir l'utilité du FixedUpdate dans ces cas là).

Pour un rafraichissement de distance, il vaut mieux quand même le faire dans un update/fixedUpdate qui est prévu pour. Le InvokeRepeating est généralement pour faire une action que l'on veut répéter à un moment donné, dans un état. Ensuite tu CancelInvoke() pour l'arrêter. Si tu veux arrêter quelque chose dans un update c'est ponctuel, genre avec un booleen, tu laisses une condition quoi.

Moi c'est comme ça que je l'utilise en tout cas, je dis pas que c'est parfait, mais c'est comme ça que je saisis le système. Après, de manière générale, si on peut éviter ce genre de fonction c'est bien aussi, parce que il faut se rendre compte que ça consomme :)
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Problème WaitForSeconds()

Message par ZJP » 05 Nov 2015 16:38

En parlant de Coroutine : http://forum.unity3d.com/threads/c-coro ... ip.224878/
A lire !!!. 8-)

Répondre

Revenir vers « (C#) CSharp »