Page 1 sur 1

[RESOLU] unity sait pas compter ?

Publié : 01 Avr 2021 19:23
par UnityNoobUser
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 ?

Re: unity sait pas compter ?

Publié : 01 Avr 2021 20:27
par jmhoubre
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.

Re: unity sait pas compter ?

Publié : 01 Avr 2021 20:30
par Max
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

Re: unity sait pas compter ?

Publié : 01 Avr 2021 20:50
par UnityNoobUser
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

Re: unity sait pas compter ? [RESOLU]

Publié : 02 Avr 2021 07:58
par boubouk50
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.