quelqu'un sait comment faire pour appeler le
Code : Tout sélectionner
yield return new WaitForSeconds(5)
Merci d'avance
Code : Tout sélectionner
yield return new WaitForSeconds(5)
S'utilise uniquement dans une coroutine qui peut tres bien etre static. Je comprends pas trop ton souci ...yield return new WaitForSeconds(5)
Ce n'est pas possible dans Unity de faire ça. J'ai essayé, l'outil gueule et j'ai vérifié sur des forums et certains ont eu ce soucis.Je comprends pas trop ton souci...
Code : Tout sélectionner
yield return new WaitForSeconds(5)
Code : Tout sélectionner
//distribution
//Récupération du prochain trou
goProchainTrou = getProchainTrou(goTrouCourant);
tabCoord = TraitementsPartages.getCoordByGameObject(goProchainTrou, "humain"); //coord prochain trou
//Incrémentation du prochain trou
unTrou = goProchainTrou.GetComponent<UnTrou>();
int newNbPion = unTrou.nbPion+1;
TraitementsPartages.setNbetLabelPion(tabCoord[0], tabCoord[1], newNbPion, "humain");
// on enlève un pion au trou courant et on rajoute un pion au prochain trou
GameObject pion = goTrouOrigineTouche.GetComponent<UnTrou>().RemoveFirst();
//On demande au trou suivant de donner une nouvelle position à ce nouveau pion
Vector2 nouvellePositionPion = goProchainTrou.GetComponent<UnTrou>().getRandomPointForPawn();
GameObject positionNouvelle = GameObject.Find("ObjetTemporaire");
positionNouvelle.transform.localPosition = nouvellePositionPion;
TraitementsPartages.AnimationPion(pion, UnTrou.GoTrouDetecteApresClick, positionNouvelle);
//iTween.MoveBy(pion, iTween.Hash("x", goProchainTrou.GetComponent<UnTrou>().getRandomPointForPawn(), "time", 0.5, "oncomplete", "EndHorizontalMove"));
goProchainTrou.GetComponent<UnTrou>().listePion.Add(pion); //le nombre de pion de ce trou augmente
StartCoroutine(Example()); //On est censé attendre 5 seconde, mais nada
goTrouCourant = goProchainTrou;
nbPionTrouOrigine--;
}
Normal, le lancement de la coroutine ne lock pas le reste de cette fonction sauf si elle est elle même appelé dans une coroutine et dans ce cas tu yield le StartCoroutine. Il faut que la suite de cette fonction soit appelée 5 secondes plus tard. Donc ces lignes doivent être dans la coroutine elle même et après ton delay.//On est censé attendre 5 seconde, mais nada
Code : Tout sélectionner
public void JouerUnTour()
{
GameObject goTrouCourant = UnTrou.GoTrouDetecteApresClick; //Initialisation d'une variable locale
GameObject goTrouOrigineTouche = goTrouCourant; //Cette variable permet de toujours savoir d'où on est parti. Sert aussi dans le cas du monde ndiri nda mo
GameObject goProchainTrou;
UnTrou unTrou;
int[] tabCoord;
//Test du nombre de pion
int nbPionTrouOrigine = goTrouCourant.GetComponent<UnTrou>().nbPion; //nombre de pion de ce trou
if(nbPionTrouOrigine <= 1)
{
//TODO : Afficher un message comme quoi on ne peut pas déplacer avec 0 ou 1 pion
}
else
{
//On met le trou à zéro
//Récupération des cooord du trou courant
tabCoord = TraitementsPartages.getCoordByGameObject(goTrouCourant, "humain");
TraitementsPartages.setNbetLabelPion(tabCoord[0],tabCoord[1],0,"humain");
while (nbPionTrouOrigine > 1)
{
//distribution
//Récupération du prochain trou
goProchainTrou = getProchainTrou(goTrouCourant);
tabCoord = TraitementsPartages.getCoordByGameObject(goProchainTrou, "humain"); //coord prochain trou
//Incrémentation du prochain trou
unTrou = goProchainTrou.GetComponent<UnTrou>();
int newNbPion = unTrou.nbPion+1;
TraitementsPartages.setNbetLabelPion(tabCoord[0], tabCoord[1], newNbPion, "humain");
// on enlève un pion au trou courant et on rajoute un pion au prochain trou
GameObject pion = goTrouOrigineTouche.GetComponent<UnTrou>().RemoveFirst();
//On demande au trou suivant de donner une nouvelle position à ce nouveau pion
Vector2 nouvellePositionPion = goProchainTrou.GetComponent<UnTrou>().getRandomPointForPawn();
GameObject positionNouvelle = GameObject.Find("ObjetTemporaire");
positionNouvelle.transform.localPosition = nouvellePositionPion;
TraitementsPartages.AnimationPion(pion, UnTrou.GoTrouDetecteApresClick, positionNouvelle);
//iTween.MoveBy(pion, iTween.Hash("x", goProchainTrou.GetComponent<UnTrou>().getRandomPointForPawn(), "time", 0.5, "oncomplete", "EndHorizontalMove"));
goProchainTrou.GetComponent<UnTrou>().listePion.Add(pion); //le nombre de pion de ce trou augmente
StartCoroutine(Example());
goTrouCourant = goProchainTrou;
nbPionTrouOrigine--;
}
Code : Tout sélectionner
public static void AnimationPion(GameObject pion, GameObject trouInitial, GameObject destination)
{
ppion = pion;
prochainTrou = destination;
Vector3[] path = new Vector3[2];
Vector3 pivot = getPositionPivot(trouInitial, destination);
Hashtable h = new Hashtable();
path[0] = pivot;
path[1] = destination.transform.position;
//il faudra passer le game object en paramètre
h.Add("path", path); //tableau avec les différents pour pour le déplacement du pion
h.Add("time", 2); //durée de l'animation
h.Add("onstart", "DeplacementOmbre"); //On fait déplacer une ombre en même temps pour donner un effet de déplacement dans l'espace
h.Add("trasition", "easeInCirc");
//path[3] = new Vector3(0, 0, 0);
iTween.MoveTo(pion, h); //if you do not want the object to animate to the first point on the path add */
//CoroutineUtil.WaitForRealSeconds(5);
//iTween.Stab();
}
Après des tests, j'ai compris ce que tu voulais dire. J'ai donc déclaré ma méthodeFreelax a écrit :Normal, le lancement de la coroutine ne lock pas le reste de cette fonction sauf si elle est elle même appelé dans une coroutine et dans ce cas tu yield le StartCoroutine. Donc ces lignes doivent être dans la coroutine elle même et après ton delay.//On est censé attendre 5 seconde, mais nada
Code : Tout sélectionner
public IEnumerator jouerUnTour()
Code : Tout sélectionner
Les chemins de code ne retournent pas tous une valeur