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