【发布时间】:2023-03-26 07:01:01
【问题描述】:
我有一个协程的 IEnumerator,它会产生这样的对象
public IEnumerator spawnCoroutine;
private float spawnObstacleTimer;
void Start () {
spawnObstacleTimer = GameObject.Find("EventSystem").GetComponent<gameManager>().spawnObstacleTimer;
spawnCoroutine = spawnObsCoroutine(spawnObstacleTimer);
startSpawnCoroutine();
}
public IEnumerator spawnObsCoroutine(float timer)
{
while (true)
{
yield return new WaitForSeconds(timer);
spawnObs();
}
}
public void startSpawnCoroutine()
{
StartCoroutine(spawnCoroutine);
}
public void stopSpawnCoroutine()
{
StopCoroutine(spawnCoroutine);
}
我在它运行良好的 Start() 上启动它。但是我已经设置了一个碰撞检测来在触发时停止这个协程。这再次运行良好,但是当我调用 OnCollisionExit() 时,它使用函数 startSpawnCoroutine() 重新启动协程;立即生成一个新对象并忽略yield return new WaitForSeconds()
那么这是怎么发生的呢? StopCouroutine 应该停止它,当我重新启动它时,它应该在执行生成之前等待几秒钟。
感谢您的帮助
【问题讨论】: