Unity中的WaitForSeconds()出现问题

时间:2014-05-04 18:28:10

标签: c# unity3d coroutine

我试图在更新功能中调用拍摄动画,然后在产生激光照片之前等待0.5秒。以下代码对我不起作用。我该怎么做才能达到预期的效果?

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);
}

1 个答案:

答案 0 :(得分:10)

您忘记使用StartCoroutine()将其称为协程。

应该是:

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);
}

请记住,这仍然允许您在第一次拍摄之前触发多次拍摄。如果你想防止这种情况发生,用布尔值跟踪被射击的射击,并检查除GetMouseButtonDown之外的射击。