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