Page 1 sur 1

petit script Timer ne fonctionne pas : pourquoi?

Publié : 21 Nov 2021 17:26
par Kaloverian
bonjour,

Inspiré par ce petit tuto:
https://www.youtube.com/watch?v=Unkj6QDhC1s

j'ai à peu près copié le script du tuto qui ne fonctionne pas:pourquoi?

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;


public class Timer : MonoBehaviour
{
  

    float time,tick;
    public float TimeInterval=5f;

  

    void Awake()
    {
        time=Time.time;
        tick=TimeInterval;

     }

    // Start is called before the first frame update
    void Start()
    {
        
    }

    
      
    // Update is called once per frame
    void Update()
    {    
      
        time=Time.time;

        
   
       if (time==tick)
       { 
           tick=time+TimeInterval;
           
           print("hello");
      
       }
        
  }
     

    
}
Rien ne s'affiche dans ma console malgré print("hello").
J'espérais que hello s'affiche tous les TimeInterval

merci de votre aide

Re: petit script Timer ne fonctionne pas : pourquoi?

Publié : 21 Nov 2021 17:58
par Max
Bonsoir,

c'est normal. C'est dû à ta ligne if(time==tick) où tu cherches à faire un test d'égalité sur deux floats, dont l'égalité est extrêmement aléatoire. On évite ce genre de chose (sujet qui revient souvent ici sur le forum).
D’ailleurs dans le tuto ce n'est pas pour rien qu'il "transtype" en int, ce qui est un peu lourdingue d'ailleurs (après il le justifie peut-être dans la vidéo), vu qu'il suffit d'écrire if(time>tick) pour rendre le code fonctionnel.

Re: petit script Timer ne fonctionne pas : pourquoi?

Publié : 21 Nov 2021 22:31
par Kaloverian
alors je suppose que dans tous les langages de programmation,l'égalité entre 2 floats ne fonctionne pas?

autre question du genre
Comment présenter un script de manière que l'update s'execute après un laps de temps choisi?

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;


public class  Update_retarde : MonoBehaviour
{
    public float TimeInterval=5f;

   

    void Awake()
    {
        time=Time.time;
        tick=TimeInterval;

     }

    // Start is called before the first frame update
    void Start()
    {
         print("hello1");
   
    }


 

    // Update is called once per frame
    void Update()
    {    
     
        time=Time.time;

        
       //il faut executer Random à certains laps de temps(pas à chaque update)
       if (time>tick)
       { 
           tick=time+TimeInterval;
           
           print("hello2");
       
       }
        
       }

    
}
Dans ce script,hello1 va s'afficher immédiatement

1)comment modifier ce script pour que hello1 s'affiche à partir de 3 secondes?
(et non tout de suite)
2)comment modifier ce script pour que hello2 s'affiche 7 secondes après l'affichage de hello1 ?

merci

Re: petit script Timer ne fonctionne pas : pourquoi?

Publié : 22 Nov 2021 08:04
par Max
Bonjour,

dans ton script, il semble qu'il manque une } au niveau de ta fonction Start.
Sinon, pour faire ce que tu cherches à faire, je pense que tu aurais intérêt à regarder du coté des coroutines et de WaitForSeconds.