3 回答
TA贡献1827条经验 获得超8个赞
您需要使用调用由所返回StopCoroutine的相同 引用来进行调用,如下所示:CoroutineStartCoroutine
private Coroutine loopCoroutine;
public void LoopButton()
{
if (lb == 1)
{
StopCoroutine(loopCoroutine);
tb--;
}
else
{
loopCoroutine = StartCoroutine(AutoLoop());
tb++;
}
}
要使用此方法,请将您的AutoLoop方法更改为使用while循环,而不是AutoLoop在方法结束时启动另一个协程。否则,您将无法停止从末尾开始的新协程AutoLoop。
IEnumerator AutoLoop()
{
while(true)
{
slider.value = slider.minValue;
while (slider.value < slider.maxValue)
{
slider.value++;
yield return new WaitForSeconds(0.5f);
}
}
}
对于另一个解决方案,正如另一个用户所评论的那样,也可以通过布尔标志来停止协程:
private bool stopLoop;
public void LoopButton()
{
if (lb == 1)
{
stopLoop = true;
tb--;
}
else
{
stopLoop = false;
StartCoroutine (AutoLoop ());
tb++;
}
}
IEnumerator AutoLoop()
{
slider.value = slider.minValue;
while (slider.value < slider.maxValue && !stopLoop)
{
slider.value++;
yield return new WaitForSeconds(0.5f);
}
if (!stopLoop)
{
StartCoroutine(AutoLoop());
}
}
但是,StopCoroutine为了提高可读性和整洁度,使用Unity优于使用布尔值标志。
TA贡献1802条经验 获得超6个赞
使用字符串作为协程名称。像这样:
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");
}
TA贡献1775条经验 获得超8个赞
您可以使用StopCoroutine
。
此处的更多信息:https : //docs.unity3d.com/ScriptReference/MonoBehaviour.StopCoroutine.html
- 3 回答
- 0 关注
- 502 浏览
添加回答
举报