Partage
  • Partager sur Facebook
  • Partager sur Twitter

Coroutine ne fonctionne pas, Unity 5.6.5

Anonyme
    13 mai 2018 à 0:43:43

    Bonjour :)

    Je suis sur un projet de FPS avec Unity 5.6.5 et j'ai besoin d'une coroutine pour faire une pause entre des animations (là c'est un simple code de test)

    Le programme passe de "GetComponent<Animator> ().SetBool ("Shot", true);" à "gameObject.SetActive (false);" en affichant le "Debut corou" mais c'est tout... Le reste de la coroutine est ignorée.

    Quelqu'un saurait ce qui se passe, svp ?

    Je désespère vraiment là. :(

    P.S : Je code en C#.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class P40 : MonoBehaviour {
    	
    	// Update is called once per frame
    	void Update () {
    		if (Input.GetKeyDown (KeyCode.U)) {
    			GetComponent<Animator> ().SetBool ("Shot", true);
    
    			// On appelle la f**king coroutine qui ne fonctionne pas
    			StartCoroutine("Tir"); // Existe aussi sous la forme StartCoroutine(Tir()); mais aucun des deux ne fonctionne pour moi
    
    			// La coroutine reprend immédiatement ici après avoir affiché "Debut corou"
    			gameObject.SetActive (false);
    		}
    	}
    
    	// On code la coroutine
    	IEnumerator Tir()
    	{
    		// Le message suivant s'affiche parfaitement
    		print ("Debut corou");
    		// La coroutine s'arrête mystérieusement à cet endroit précis du code.
    
    		// La coroutine passe cette partie-là à travers un trou noir.
    		yield return new WaitForSeconds(20f); // Est-ce cette instruction-là qui cloche ? Merci de me donner votre avis.
    		print ("Fin corou");
    	}
    }
    
    

    -
    Edité par Anonyme 13 mai 2018 à 1:16:26

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      13 mai 2018 à 11:53:46

      Salut,

      Est-ce que tu as attendu les 20 secondes nécessaires pour que le WaitForSeconds s'execute ?

      Essaye plutôt avec 1f au lieu de 20f, ça permettre de ne pas attendre pour voir le résultat.

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        13 mai 2018 à 12:03:28

        bonjour,

        j'ai essayé avec 20 et 20f et dans tous les cas le programme passe directement à la ligne "destroy" comme si la fin de la coroutine était ignorée (à noter, le "fin corou" ne s'affiche pas non plus. Cela signfie que ma coroutine ne s'exécute pas jusqu'à la fin).

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          13 mai 2018 à 12:22:20

          L'instruction gameObject.SetActive(false) s'exécute alors que la coroutine n'a pas fini (ce qui est normal), donc l'objet est désactivé et la couroutine ne continue plus. Si tu veux que l'objet se désactive après la coroutine, il faudrait plutôt mettre le SetActive à la fin de la coroutine.
          • Partager sur Facebook
          • Partager sur Twitter

          Coroutine ne fonctionne pas, Unity 5.6.5

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown