随着时间的推移,Unity Easing应该开火一次

时间:2016-05-13 02:11:05

标签: c# unity3d coroutine

我正在尝试创建一个旋转一段时间的函数,我从一个按钮触发的协同例程中调用它。 Coroutine执行正常,唯一的问题是你可以多次触发它。

protected bool _isRotating = false;
public IEnumerator RotateWithEasing(GameHelper.Axis axis, float inTime)
{
    _isRotating = true;
    if(_isRotating)
    {
        yield return null;
    }

    var degrees = this.GetDegreesFromAxis(axis);

    Quaternion fromAngle = transform.rotation;
    Quaternion toAngle = Quaternion.Euler(transform.eulerAngles + degrees);
    for (float t = 0f; t < 1f; t += Time.deltaTime / inTime)
    {
        transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);
        yield return null;
    }

    _isRotating = false;
}

我怎样才能进行一次这样的射击,直到轮换完成后才重新开火?

1 个答案:

答案 0 :(得分:2)

使用yield break。它类似于void函数中的return关键字。它将从函数返回/存在。同时将_isRotating = true;放在if语句之后而不是之前。将其余代码留在原处。

更改

 _isRotating = true;
 if(_isRotating)
 {
   yield return null;
 }

if (_isRotating)
{
    yield break;
}
_isRotating = true;