随着时间的推移,团结放松应该会开火一次



我试图创建一个在一段时间内旋转的函数,我从按钮触发的协同例程中调用它。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关键字。它将从函数返回/存在。还要将_isRotating = true;放在if语句之后,而不是放在它之前。

更改

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

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

最新更新