[RESOLU][DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

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
Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

[RESOLU][DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par Farstone » 28 Sep 2017 05:31

Salut, j'ai une question un peu bête mais j'aimerais faire une boucle, un peu comme une fonction Update de unity qui s'exécute quand mon float arrive a 0 ou négatif 0 pour exécuter mon code, mais j'aimerais ne pas le mettre dans l'update, le mieux est qu'il vérifie si un enum est égal a une certaines valeur, et le int en dessous de 0, j'ai essayé avec un switch et des if a l'intérieur mais sa me fait une boucle infini car il est exécuté trop rapidement avant le changement de valeur de l'enum :oops:
Dernière édition par Farstone le 04 Oct 2017 07:55, édité 2 fois.

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

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un int

Message par boubouk50 » 28 Sep 2017 09:11

Bonjour,

Merci de prendre l'habitude de donner le code en même temps.
"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

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un int

Message par yonathgames » 28 Sep 2017 09:30

Salut!

Ce que tu demandes est un peu vague. Je ne comprends pas tout. Est-ce que tu veux une boucle qui surveille ton enum en dehors de l'update?
Si tu veux une boucle désynchronisée de l'update, il faut utiliser une coroutine dans laquelle tu peux régler la vitesse d'exécution.
Par contre, si tu veux une "surveillance" d'un paramètre pour exécuter un code, il faut utiliser les delegate.

Le mieux serait peut-être de nous donner un morceau de ton code pour qu'on puisse se rendre compte de ton besoin :)

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un int

Message par Farstone » 28 Sep 2017 21:29

Excusez moi pour le manque de précision j'avais peu de temps, ma demande n'est pas vitale en soit, je peux très bien me servir de l'Update mais je trouve que c'est un gâchis de performance de vérifier chaque frame si la valeur est vraie pour exécuter un if alors que j'ai déjà une méthode pour gérer ça, en faite le but c'est simplement d'ajouter 3 petit points a intervalle de 1 secondes a la fin d'un text component de l'UI est reset la phrase arrivé a 3.
En gros sa marche très bien dans l'update en fessant ceci :

Code : Tout sélectionner

void Update () {
        if(isBoxShowed)
        {
            pointAddTime -= 1 * Time.deltaTime;
            if (pointAddTime <= 0 && pointCounter != 3)
            {
                ConnectionInfoText.text += ".";
                pointCounter += 1;
                pointAddTime = 1;
            }
            if (pointAddTime <= 0 && pointCounter >= 3)
            {
                ConnectionInfoText.text = LocalizationManager.Instance.GetText("BOX_INFO_CONN");
                pointCounter = 0;
                pointAddTime = 1;
            }
        }
    }
Je décrémente simplement pointAddTime par un deltaTime d'une valeur de 1, une fois qu'il arrive a 0 ou négatif 0 et que pointCounter n'est pas égal a 3 j’exécute le if, sinon je remet pointCounter a 0 est j'affiche le text de base.
Sachant que

Code : Tout sélectionner

ConnectionInfoText.text = LocalizationManager.Instance.GetText("BOX_INFO_CONN")
est une méthode qui prend un string en propriétés, elle appartient a une classe avec un patern singleton qui gère la langue du text et renvoie un string traduit dans la langue choisis donc en gros ConnectionInfoText est égal à "Connexion" mais ça na pas vraiment d'importance dans l'exemple.
Rien de sorcier jusque là, mais j'aimerais éviter de le mettre dans l'update. Le problème c'est que je ne trouve pas le moyen de faire un genre de switch qui s’exécute de la même manière est en boucle tant que que 2 enum son identique.
Au final j'aimerais simplement reproduire ça sans me servir de l'update.

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par yonathgames » 28 Sep 2017 21:56

Ok voici ce que je ferais :

Code : Tout sélectionner

void Start()
{
StartCoroutine ("boucleCoroutine");
}
ce qui demarrera la coroutine suivante :

Code : Tout sélectionner

IEnumerator boucleCoroutine()
{
if (isBoxShowed)
        {
        do{
                        if ( pointCounter != 3)
            {
                ConnectionInfoText.text += ".";
                pointCounter += 1;
                
            }
            if ( pointCounter >= 3)
            {
                ConnectionInfoText.text = LocalizationManager.Instance.GetText("BOX_INFO_CONN");
                pointCounter = 0;
                
            }
        }
        yield return new WaitForSeconds(1.0f);  //le temps de pause entre chaque boucle
        }while (true);  // la boucle s'exécutera tout le temps
    }
J'ai enlevé pointAddTime qui ne sert qu'à contrôler la boucle je pense.

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par Farstone » 28 Sep 2017 22:11

Le problème c'est que tant que l'enum est identique ça va faire une boucle infini est faire planter le programme, j'ai bien sur pensé a faire un while du style
while (enum state == enum.value)
est justement ça fait planter l'éditeur :/

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par yonathgames » 28 Sep 2017 22:54

Une coroutine peut être infinie. je viens d'essayer :cote:

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par Farstone » 30 Sep 2017 00:28

Merci à toi j'essaierais ça, je t'avoue que je ne suis pas familier avec les coroutines, je me ferrais quelques sujet la dessus pour mieux comprendre leur fonctionnement/but.

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par yonathgames » 30 Sep 2017 18:24

La coroutine permet d'exécuter des codes de façon désynchronisée de l'update. On peut y faire des boucles, des pauses, etc... Sans avoir de répercussion sur les performances de la boucle générale (update, fixedupdate,...) Le tuto unity est bien fait à ce sujet.

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

Re: [DB-AL] Faire une boucle soit même qui s'exécute a la valeur negative d'un float

Message par boubouk50 » 02 Oct 2017 09:25

Pour lancer une fonction à intervalle régulier, tu as la fonction InvokeRepeating ()
"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 « (C#) CSharp »