J'ai créé un 2D object/sprite/square.
J'ai mis une image dans le Sprite Renderer.
J'ai attaché le script target à ce GameObject (appelons-le "image").
J'en ai fait un préfab.
Dans une coroutine avec un yield return new WaitUntil(VraiFaux) et VraiFaux() renvoie false
L'"image" est instanciée et elle attend que quelqu'un lui clique dessus.
Cela provoque l'appel d'un particuleSystem, une étoile semi-transparente apparaît sur l'étoile, elle grossit puis disparaît lentement. cela prend environ 2 secondes.
J'ai réussi à mettre une coroutine avec un yield return new WaitForSeconds(2).
Une fois l’animation finie, l’image est détruite.
Je fais en sorte que VraiFaux() renvoie true pour que la première coroutine affiche une nouvelle « image » gràce à une boucle.
Cela marche bien mais je me dis qu’il doit y avoir un autre moyen pour faire savoir à la coroutine qu’elle doit attendre le temps que le particuleSystem ait fini de jouer.
J’ai donc essayé une coroutine avec un while(nomParticuleSystem) {yield return null}
Ça ne marche pas, l’image est effacée dès le début de l’animation et une nouvelle image est instanciée aussitôt pendant que l’animation joue.
J’ai essayé aussi
var main = nomParticuleSystem.main ;
while(main.StartSize!= 0) {yield return null}
J’ai essayé aussi
var emission = nomParticuleSystem.emission ;
while(emission.enabled) {yield return null}
Quelqu’un a-t’il une solution ? Merci beaucoup.
Code : Tout sélectionner
void ImageClic()
{
StartCoroutine(AfficheEtoile()); // faire la coroutine d'animation étoile
reinitial(); // passer à l'image suivante
}
// animation d'une étoile sur l'image
IEnumerator AfficheEtoile()
{
Instantiate(etoileParticle, transform.position, etoileParticle.transform.rotation); // faire apparaitre l'étoile sur l'image cliquée (l'animation est attachée à l'image)
var emission = etoileParticle.emission;
// tant que le etoileParticle est actif
while(emission.enabled)
{
Debug.Log("j'attends " );
yield return null;
}
}
// passer à l'image suivante
void reinitial()
{
Destroy(gameObject); // détruire l'image
gameManager.affichageSuivant = true; // signaler au script gameManager que la variabe "affichageSuivant" est sur "true" pour que VraiFaux() retourne true
}