[RESOLU ] [DB-AL] Obtenir un "Update" toute les secondes

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
SidCamelot
Messages : 27
Inscription : 16 Oct 2018 23:14

[RESOLU ] [DB-AL] Obtenir un "Update" toute les secondes

Message par SidCamelot » 20 Oct 2018 19:54

Bonjour à tous.

Je voudrais pouvoir effectuer une action "automatiquement" (par exemple déplacer un objet) chaque seconde (ou chaque 2 ou 10 secondes peu importe). Je suppose que je devrais passer par un fixedUpdate() mais je ne trouve pas comment faire en sorte que ça déclenche un événement au bout d'un temps précis (toute les 1, 2 ou 10 secondes par exemple).


J'ai fait ça :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Timer2Script : MonoBehaviour
{
    private int cont;

    void Start()
    {
        StartCoroutine(MontTimer());
    }

    IEnumerator MontTimer()
    {
        while (cont <= 5)
        {

            cont++;
            yield return new WaitForSeconds(1);
            print(Time.time);
        }
    }
}
Mais je me demande si il n'y a pas une méthode plus "élégante"...

Merci d'avance
.
 ! Message de : Max
Utilisez les balises code SVP
Merci de lire la Charte et sa FAQ, en particulier Comment insérer un script dans un messages ?.
Dernière édition par SidCamelot le 20 Oct 2018 20:51, édité 2 fois.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [DB] Obtenir un "Update" toute les secondes

Message par djulio74 » 20 Oct 2018 20:27

Salut.
Alors pour ça tu peux avoir deux possibilité :
- Soit dans la fonction Update avec un timer qui recupere le temps passer
- avec une couroutine et waitForSecond.

Dans un Update :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
public class test : MonoBehaviour
{	
	float tempsDerniereExecution = 0.0f; // stock le temps passé depuis la derniere execution;
	float delai;	// tu defini l'interval voulu, en seconde.	

	void Update ()
	{		
		tempsDerniereExecution += Time.fixedDeltaTime;  // ajoute a chaque update le temps écoulé depuis le dernier Update		
		if (tempsDerniereExecution > delai) {
			MonAction ();
			tempsDerniereExecution = 0;			
		}	
	}	
	void MonAction ()
	{		
		// ici tout ce que tu veux qu'il se passe toute les "delai" secondes//
		
	}
}
ou avec les couroutine :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour
{

	float delai;	// tu defini l'interval voulu, en seconde.	

	void Start (){		
		StartCoroutine(MonAction (delai));
	
	}
	
	IEnumerator MonAction (float delai){		
		yield return new WaitForSeconds(delai);		
		// ici tout ce que tu veux qu'il se passe toute les "delai" secondes//		
	}
}

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

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

Re: [DB] Obtenir un "Update" toute les secondes

Message par Max » 20 Oct 2018 20:34

Bonsoir,
Je suppose que je devrais passer par un fixedUpdate() mais je ne trouve pas comment faire en sorte que ça déclenche un événement au bout d'un temps précis
je ne sais pas comment tu es arrivé pour ce genre de chose au FixedUpdate.
Pour rappel: This function is called every fixed framerate frame, if the MonoBehaviour is enabled. FixedUpdate should be used instead of Update when dealing with Rigidbody. ;)

En complément, et sans présumer de ce que tu cherches à faire précisément, pour faire un déclenchement toute les 'x' secondes, tu peux regarder aussi du coté de InvokeRepeating.
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

SidCamelot
Messages : 27
Inscription : 16 Oct 2018 23:14

Re: [RESOLU ] [DB-AL] Obtenir un "Update" toute les secondes

Message par SidCamelot » 20 Oct 2018 20:50

Merci pour vos réponses, rapides, claires et efficaces. J'ai testé et c'est exactement ce que je souhaitais. :super:

Pardon pour avoir balancé mon script sans les balises. Ça ne se reproduira pas (erreur de débutant :oops: ).

Répondre

Revenir vers « (C#) CSharp »