Unity Easing 随着时间的推移应该触发一次

Unity Easing over time should fire once

我正在尝试创建一个在一段时间内轮换的函数,我从一个由按钮触发的协同例程中调用它。 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;
}

我怎么才能开火一次,轮换完成后再注册开火呢?

使用yield break。它就像 void 函数中的 return 关键字。它将 return/exist 来自函数。还要将 _isRotating = true; 放在 if 语句之后,而不是放在它之前。将其余代码留在原处。

改变

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

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