[RESOLU] unity sait pas compter ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
UnityNoobUser
Messages : 20
Inscription : 21 Fév 2021 14:54

[RESOLU] unity sait pas compter ?

Message par UnityNoobUser » 01 Avr 2021 19:23

Slt ,

une petite question: est ce que unity ne sait pas compter ou c'est moi qui suis encore trop fatigué ? :hehe:

j'ai besoin de faire un petit timer pour lancer une coroutine après par exemple les 5 premières secondes de la scène. je fais mon code avec ma boucle, je lance et la unity plante ! . je relis mon code je capte pas pourquoi la boucle se lit indéfiniment car il y a bien une valeur qui s'incrémente etc ...
apres 20mn a tourner dans tous les sens je décide de tester le code ultra simplifié dans update pour voir ce qui se passe.

voici le code:

Code : Tout sélectionner


 void Update()
{

float compteur = 0f;
float endTime = 10f;

if (compteur < endTime)
{
compteur += (int)Time.timeSinceLevelLoad;
Debug.Log(compteur +" < " + endTime);
}

et bien surprise à partir de 10s la condition est tjrs respectée car la console m'affiche "11 < 10" et continue 8/

pourquoi unity m'indique que 11 est inférieur a 10 ?
Dernière édition par UnityNoobUser le 01 Avr 2021 20:51, édité 1 fois.

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: unity sait pas compter ?

Message par jmhoubre » 01 Avr 2021 20:27

Bonsoir,

Unity sait compter. Que fait la fonction Update, plusieurs dizaines de fois par seconde ?
- elle crée une variable compteur valant 0, et une variable endTime valant 10
- elle test (compteur < endTime), qui est vraie
- elle entre dans le bloc du if, ajoute un nombre à compteur, et affiche c{compteur} < {endTime}
Puis elle recommence.

Je te propose d'ajouter, entre le "if" et le "compteur +=", la ligne suivante :

Code : Tout sélectionner

        Debug.Log ($"{compteur}  {endTime}");
Elle devrait t'aider à comprendre ton erreur.

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: unity sait pas compter ?

Message par Max » 01 Avr 2021 20:30

Bonsoir,

je dirais qu'en écrivant en local:

Code : Tout sélectionner

        float compteur = 0f;
        float endTime = 10f;
tu auras toujours compteur égale à 0 et endTime égale à 10, donc ta condition sera toujours vrai...
Donc cela ne peut pas fonctionner. Il faut bien appréhender le fonctionnement des données locales et leur portées ;)
Sinon, pourquoi ce transtypage (float->int) sur Time.timeSinceLevelLoad ?

Sinon, si tu souhaites un retard à l'action au démarrage de ta scène, voici un lien qui pourrait être utile: viewtopic.php?f=98&t=16741
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

UnityNoobUser
Messages : 20
Inscription : 21 Fév 2021 14:54

Re: unity sait pas compter ?

Message par UnityNoobUser » 01 Avr 2021 20:50

mdr ba oui maintenant qu'on me le dit forcement que la condition est tjrs vrai puisque la valeur de mes variables est reinialisé a chaque frame avant le if... pourtant me suis bien dit que c'est unity qui avait raison alors post pas tu vas encore te traiter d'idiot apres. et ben c'est fait :lol:

merci pour le Debug.Log ($"{compteur} {endTime}"); étrange cette syntaxe à lire !

et merci pour l'astuce du IEnumerator Start() c'et vrai que j'aurai pu penser à utiliser un "yield return new WaitForSeconds(5f) au début de la coroutine que je veux lancer apres 5s... ça m’évite de me casser la tête à faire un compteur;"

vous êtes vraiment cool de prendre du temps pour aider les UnityNoobUser comme moi. encore merci

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

Re: unity sait pas compter ? [RESOLU]

Message par boubouk50 » 02 Avr 2021 07:58

Si c'est pour juste délayer un appel de fonction, tu as aussi la possibilité d'utiliser la fonction Invoke ().

Code : Tout sélectionner

private void Start ()
{
	Invoke ("MaFonction", 5f);
}

private void MaFonction ()
{
	//Mon code
}
Ici, MaFonction () sera appelée 5 secondes après le Start (). C'est le plus court que tu puisses faire.
"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

Répondre

Revenir vers « Scripting »