我正在尝试创建一个旋转一段时间的函数,我从一个按钮触发的协同例程中调用它。 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;
}
我怎样才能进行一次这样的射击,直到轮换完成后才重新开火?
答案 0 :(得分:2)
使用yield break
。它类似于void函数中的return
关键字。它将从函数返回/存在。同时将_isRotating = true;
放在if
语句之后而不是之前。将其余代码留在原处。
更改
_isRotating = true;
if(_isRotating)
{
yield return null;
}
到
if (_isRotating)
{
yield break;
}
_isRotating = true;