我正在尝试在2D碰撞后的几秒钟内运行代码块。当前,当发生冲突时,它会调用一个循环自身的函数,直到达到特定时间为止。使用时间变量并在每次迭代中添加Time.deltaTime
来计算时间。
这是功能
public void springBack(Collider2D collision, float timeCount) {
if (timeCount > springReloadTime * 10) {
Debug.Log("Springing Back!");
timeCount = 0f;
} else {
timeCount = timeCount + Time.deltaTime;
springBack(collision, timeCount);
}
}
运行此程序时出现问题。一切发生在碰撞后的一帧中,而不是几秒钟之后。如果我可以在下一帧调用springBack(collision, timeCount);
函数,那么它将起作用。当我查找它时,有人建议使用yield return null;
,但是由于这不是循环,因此在这里出现此错误:
The body of 'playerMovement.springBack(Collider2D, float)' cannot be an iterator block because 'void' is not an iterator interface type
还有另一种方法可以强制它在下一帧上运行吗?我可以从update()
循环中调用它,但是我认为我可以运行该函数的多个实例,而无需相互推断。如果您需要某些公共变量的值(例如springReloadTime
),请询问。