結束協同程式
通常,當符合某些目標時,你會設計協同程式以自然結束。
IEnumerator TickFiveSeconds()
{
var wait = new WaitForSeconds(1f);
int counter = 1;
while(counter < 5)
{
Debug.Log("Tick");
counter++;
yield return wait;
}
Debug.Log("I am done ticking");
}
為了從協同程式的內部停止協同程式,你不能簡單地返回,因為你將從普通函式中提前離開。相反,你使用 yield break
。
IEnumerator ShowExplosions()
{
... show basic explosions
if(player.xp < 100) yield break;
... show fancy explosions
}
你還可以強制指令碼啟動的所有協同程式在完成之前停止。
void OnDisable()
{
// Stops all running coroutines
StopAllCoroutines();
}
從呼叫者停止特定協程的方法取決於你啟動它的方式。
如果你通過字串名稱啟動了一個協同程式:
StartCoroutine("YourAnimation");
那麼你可以通過使用相同的字串名稱呼叫 StopCoroutine 來阻止它 :
StopCoroutine("YourAnimation");
或者,你可以保持一個參考或者由協同程式方法,返回的 IEnumerator
或通過 StartCoroutine
返回的 Coroutine
物件,並呼叫 StopCoroutine
在任的那些:
public class SomeComponent : MonoBehaviour
{
Coroutine routine;
void Start () {
routine = StartCoroutine(YourAnimation());
}
void Update () {
// later, in response to some input...
StopCoroutine(routine);
}
IEnumerator YourAnimation () { /* ... */ }
}