3 回答

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
您需要使用調(diào)用由所返回StopCoroutine的相同 引用來進(jìn)行調(diào)用,如下所示:CoroutineStartCoroutine
private Coroutine loopCoroutine;
public void LoopButton()
{
if (lb == 1)
{
StopCoroutine(loopCoroutine);
tb--;
}
else
{
loopCoroutine = StartCoroutine(AutoLoop());
tb++;
}
}
要使用此方法,請將您的AutoLoop方法更改為使用while循環(huán),而不是AutoLoop在方法結(jié)束時啟動另一個協(xié)程。否則,您將無法停止從末尾開始的新協(xié)程AutoLoop。
IEnumerator AutoLoop()
{
while(true)
{
slider.value = slider.minValue;
while (slider.value < slider.maxValue)
{
slider.value++;
yield return new WaitForSeconds(0.5f);
}
}
}
對于另一個解決方案,正如另一個用戶所評論的那樣,也可以通過布爾標(biāo)志來停止協(xié)程:
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優(yōu)于使用布爾值標(biāo)志。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超6個贊
使用字符串作為協(xié)程名稱。像這樣:
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貢獻(xiàn)1775條經(jīng)驗 獲得超8個贊
您可以使用StopCoroutine
。
此處的更多信息:https : //docs.unity3d.com/ScriptReference/MonoBehaviour.StopCoroutine.html
- 3 回答
- 0 關(guān)注
- 527 瀏覽
添加回答
舉報