【发布时间】:2018-10-12 05:26:21
【问题描述】:
我正在尝试使用按钮启动和结束协程。我可以启动协程但我不能停止它,如果我在第一次启动协程后再次单击按钮,它会再次重新启动并且滑块值上升。
这是我的代码
public void LoopButton(){
if (lb == 1){
StopCoroutine (AutoLoop());
tb--;
} else {
StartCoroutine (AutoLoop ());
tb++;
}
}
IEnumerator AutoLoop(){
slider.value = slider.minValue;
while(slider.value < slider.maxValue){
slider.value++;
yield return new WaitForSeconds(0.5f);
}
StartCoroutine (AutoLoop());
}
【问题讨论】:
-
您应该适当地添加一个“已取消”布尔值,这样您就可以检查 whiles 条件。假设在 Unity 中没有专门的方法来处理这个问题。它确实有点像这里正在发生一些隐式的多任务处理。
-
@Christopher 同意。请注意,通过协程进行的多任务处理只是一个花哨的调度程序,它在 Unity 的同一个主线程中运行 :)
-
@Christopher 太棒了,谢谢大家! :)
-
@Christopher 可能会将其添加为答案。我会投票给你:)
-
我认为有一种特定于 Unity 的方法来处理这个问题,所以我添加了一个答案。 @Christopher 我还在我的帖子中包含了您的建议作为替代答案。
标签: c# loops unity3d coroutine