2014-05-04 6 views
0

J'essaie d'invoquer une animation de prise de vue dans la fonction de mise à jour, puis j'attends 0,5 seconde avant de générer un tir laser. Le code ci-dessous ne fonctionne pas pour moi. Que puis-je faire pour obtenir le résultat souhaité?Problème avec WaitForSeconds() dans Unity

void Update() 
{ 
    if (Input.GetMouseButtonDown (0)) 
    { 
     animator.SetTrigger("Shoot"); // Start animation 

     WaitAndShoot();   
    } 
} 

IEnumerator WaitAndShoot() 
{ 
    yield return new WaitForSeconds(0.5f); 

    Instantiate (shot, shotSpawn.transform.position,shotSpawn.transform.rotation); 
} 
+0

J'ai trouvé ce http://www.unitygeek.com/coroutines-in-unity3d/ très utile pour comprendre Coroutines dans Unity3d –

Répondre

9

Vous oubliez de l'appeler comme une coroutine en utilisant StartCoroutine().

Il devrait être:

void Update() 
{ 
    if (Input.GetMouseButtonDown (0)) 
    { 
     animator.SetTrigger("Shoot"); // Start animation 

     StartCoroutine(WaitAndShoot());   
    } 
} 

IEnumerator WaitAndShoot() 
{ 
    yield return new WaitForSeconds(0.5f); 

    Instantiate (shot, shotSpawn.transform.position,shotSpawn.transform.rotation); 
} 

Gardez à l'esprit que ce qui vous permet encore de déclencher plusieurs coups de feu avant le premier coup a été donné naissance. Si vous voulez empêcher cela, gardez la trace d'un coup de feu ou non avec un booléen, et vérifiez cela en plus de votre GetMouseButtonDown.