problème coroutine

Questions à propos du GUI, y compris la partie script.
Soshiro98
Messages : 5
Inscription : 27 Mars 2018 17:18

problème coroutine

Message par Soshiro98 » 07 Avr 2018 15:34

Bonjour a tous,
Je veut déplacer un UI puis le faire attendre 2sec puis le refaire revenir a sa place mais le problème est que ma coroutine ne ce lance pas...
si quelqu'un peut m'aider svp je suis débutant.

voici mon code :

Code : Tout sélectionner

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

public class ActionHéro1 : MonoBehaviour {

    public RectTransform hero1;

    public RectTransform FinalPositionH1;

    public Vector3 StartPositionH1;

    public float speed;
    public float speedback;
    
    public void Start ()
    {
        hero1 = gameObject.GetComponent<RectTransform>();
        FinalPositionH1 = gameObject.GetComponent<RectTransform>();        

        StartPositionH1 = transform.position;       

        speed = -80f;
        speedback = 80f;        
    }
	
	public void H1AttaqueE1()
    {
        
        transform.Translate(speed , 0f, 0f);

        Debug.Log("take damages");

        StartCoroutine(WaitH1());   
        transform.Translate(speedback, 0f, 0f);

    }    

    public IEnumerator WaitH1()
    {        
        yield return new WaitForSeconds(2);
        transform.Translate(speedback, 0f, 0f);        
    }
}

merci pour vos futur réponse !
.
 ! Message de : Max
Utilisez les balises code SVP, et essayez de poster dans la bonne section.
Problème UI, y compris niveau code, égale section L'interface GUI
Merci de lire la Netiquette.

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

Re: problème coroutine

Message par Max » 07 Avr 2018 16:40

Bonjour,

Dans ton code, tu lances la coroutine qui doit faire un transform.Translate(speedback, 0f, 0f); au bout de 2 secondes.
Mais juste après avoir fait ton StartCoroutine(WaitH1()); tu as de suite derrière un transform.Translate(speedback, 0f, 0f);, donc pas sûr que ta coroutine serve à quelque chose dans ce cas.
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

Soshiro98
Messages : 5
Inscription : 27 Mars 2018 17:18

Re: problème coroutine

Message par Soshiro98 » 07 Avr 2018 17:21

du coup j'ai retirer ca mais ca ne fonctionne toujours pas et je vois pas ce qui fait défaut
A moins que la coroutine ne fonctionne que dans un void update mais il ne me semble pas =/

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

Re: problème coroutine

Message par Max » 07 Avr 2018 17:45

ta fonction H1AttaqueE1, elle est appelée quand ?
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

Soshiro98
Messages : 5
Inscription : 27 Mars 2018 17:18

Re: problème coroutine

Message par Soshiro98 » 07 Avr 2018 17:51

voici le script qui appelle la méthode H1AttaqueE1 (ligne 88)

Code : Tout sélectionner

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

public class Combat : MonoBehaviour
{
    public enum StateTurn
    {
        H1,
        H2,
        H3,
        H4,
        E1,
        E2,
        E3,
        E4
    }
    public StateTurn tour;

    public static bool tour_hero1;
    public static bool tour_hero2;
    public static bool tour_hero3;
    public static bool tour_hero4;
    public static bool tour_ennemie1;
    public static bool tour_ennemie2;
    public static bool tour_ennemie3;
    public static bool tour_ennemie4;

    public static bool fin_tourH1;
    public static bool fin_tourH2;
    public static bool fin_tourH3;
    public static bool fin_tourH4;
    public static bool fin_tourE1;
    public static bool fin_tourE2;
    public static bool fin_tourE3;
    public static bool fin_tourE4;

    public static bool Attaque;
    public static bool Magie;
    public static bool Sac;
    public static bool Fuite;

    public static bool Ennemie1;
    public static bool Ennemie2;
    public static bool Ennemie3;
    public static bool Ennemie4;

    public static bool retour;

    public GameObject Panel_Choix_Ennemie;

    void Start()
    {
        tour = StateTurn.H1;        

        Panel_Choix_Ennemie.SetActive(false);        
    }

    void Update()
    {
        if (Interface_Manager.Affichage_UI_Combat == true)
        {
            //if (hero1.GetComponent<Health_Manager>().CurrentHealth1 > 0 && hero2.GetComponent<Health_Manager>().CurrentHealth1 > 0 && hero3.GetComponent<Health_Manager>().CurrentHealth1 > 0 && hero4.GetComponent<Health_Manager>().CurrentHealth1 > 0)
            //{
            ////GameOver
            //}

            switch (tour)
            {
                case (StateTurn.H1):

                    fin_tourH1 = false;

                    Debug.Log("que voulez vous faire ?");
                    //appeler la méthode "que voulez vous faire ?" qui transforme le texteinfo
                    
                    if (Attaque == true)
                    {
                        Debug.Log("qui voulez vous attaquer ?");
                        //appeler la méthode "qui voulez vous attaquer ?" qui transforme le texteinfo

                        Panel_Choix_Ennemie.SetActive(true);

                        if (Ennemie1 == true)
                        {
                            Panel_Choix_Ennemie.SetActive(false);                            
                            GameObject.Find("Hero 1").GetComponent<ActionHéro1>().H1AttaqueE1();  //héro1 attque ennemie1                            
                            Attaque = false;
                            fin_tourH1 = true;
                        }
                        if (Ennemie2 == true)
                        {
                            Panel_Choix_Ennemie.SetActive(false);
                            //GameObject.Find("Hero 1").GetComponent<ActionHéro1>().H1AttaqueE2();   //héro1 attque ennemie2
                            fin_tourH1 = true;
                        }
                        if (Ennemie3 == true)
                        {
                            Panel_Choix_Ennemie.SetActive(false);
                           //GameObject.Find("Hero 1").GetComponent<ActionHéro1>().H1AttaqueE3();  //héro1 attque ennemie3
                            fin_tourH1 = true;
                        }
                        if (Ennemie4 == true)
                        {
                            Panel_Choix_Ennemie.SetActive(false);
                            //GameObject.Find("Hero 1").GetComponent<ActionHéro1>().H1AttaqueE4();  //héro1 attque ennemie4
                            fin_tourH1 = true;
                        }
                        if (retour == true)
                        {
                            Panel_Choix_Ennemie.SetActive(false);
                            Attaque = false;
                            fin_tourH1 = false;
                        }
                    }
                    if (Magie == true)
                    {
                        Debug.Log("a qui lancer le sort ?");
                        //appeler la méthode "qui voulez vous lancer sort ?" qui transforme le texteinfo

                        if (Ennemie1 == true)
                        {
                            //héro1 attque mag ennemie1
                            fin_tourH1 = true;
                        }
                        if (Ennemie2 == true)
                        {
                            //héro1 attque mag ennemie2
                            fin_tourH1 = true;
                        }
                        if (Ennemie3 == true)
                        {
                            //héro1 attque mag ennemie3
                            fin_tourH1 = true;
                        }
                        if (Ennemie4 == true)
                        {
                            //héro1 attque mag ennemie4
                            fin_tourH1 = true;
                        }
                        if (retour == true)
                        {
                            Magie = false;
                        }
                    }
                    if (Sac == true)
                    {

                    }
                    if (Fuite == true)
                    {

                    }

                    if (fin_tourH1 == true)
                    {
                        tour = StateTurn.H2;
                    }

                    break;

                case (StateTurn.H2):

                    fin_tourH2 = false;

                    //ActionHéro2.ActionH2(); //apeller la méthode action du perso actuel

                    if (fin_tourH2 == true)
                    {
                        tour = StateTurn.H3;
                    }

                    break;

                case (StateTurn.H3):

                    fin_tourH3 = false;

                    //ActionHéro3.ActionH3(); //apeller la méthode action du perso actuel

                    if (fin_tourH3 == true)
                    {
                        tour = StateTurn.H4;
                    }

                    break;

                case (StateTurn.H4):

                    fin_tourH4 = false;

                    //ActionHéro4.ActionH4(); //apeller la méthode action du perso actuel

                    if (fin_tourH4 == true)
                    {
                        tour = StateTurn.E1;
                    }

                    break;

                case (StateTurn.E1):

                    fin_tourE1 = false;

                    //apeller la méthode action du perso actuel

                    if (fin_tourE1 == true)
                    {
                        tour = StateTurn.E2;
                    }

                    break;

                case (StateTurn.E2):

                    fin_tourE2 = false;

                    //apeller la méthode action du perso actuel

                    if (fin_tourE2 == true)
                    {
                        tour = StateTurn.E3;
                    }

                    break;

                case (StateTurn.E3):

                    fin_tourE3 = false;

                    //apeller la méthode action du perso actuel

                    if (fin_tourE3 == true)
                    {
                        tour = StateTurn.E4;
                    }

                    break;

                case (StateTurn.E4):

                    fin_tourE4 = false;

                    //apeller la méthode action du perso actuel

                    if (fin_tourE4 == true)
                    {
                        tour = StateTurn.H1;
                    }

                    break;
            }
        }
    }
}

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

Re: problème coroutine

Message par Max » 07 Avr 2018 17:57

Si tu entre bien dans H1AttaqueE1 (et donc que tu as bien ton "take damages" dans la console), ta coroutine est bien lancée. Si il n'y a aucun effets au bout des 2 secondes, c'est au niveau de tes translate qu'il faut chercher. Voir tes valeurs speed et speedback.
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

Soshiro98
Messages : 5
Inscription : 27 Mars 2018 17:18

Re: problème coroutine

Message par Soshiro98 » 08 Avr 2018 20:02

ce qui étrange c'est quand je n'utilise pas la coroutine et que je place le transform.translate dans la méthode HIAttaqueE1 le déplacement fonctionne mais on ne le voit pas car il ce déplace trop vite c'est pourquoi la coroutine est pratique dans mon cas...
si je n'utilise pas la coroutine y a t'il un moyen de faire avancer le Gameobject progressivement et de le faire revenir progressivement ?
cela m'éviterai la coroutine.

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

Re: problème coroutine

Message par boubouk50 » 09 Avr 2018 09:33

Tu peux utiliser Invoke () ou bien juste mettre la totalité des déplacements dans la coroutine.
"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 « L'interface GUI »