根據官方文檔的解釋:
MonoBehaviour.StopCoroutine
使用StopCoroutine時,有兩種用法:
public void StopCoroutine(string methodName);
public void StopCoroutine(IEnumerator routine);
前者是使用方法名字符串,后者是使用方法的引用。
前者可以停止第一個名字為methodName的協(xié)程;后者可以準確地停止你引用的那個協(xié)程。
常犯的錯誤是:并沒有將協(xié)程方法賦給一個引用,如下例:
using System.Collections;
using UnityEngine;
public class TestStopCoroutine : MonoBehaviour
{
// Use this for initialization
IEnumerator Start ()
{
//錯誤示例:并不能停止DoSomething
StartCoroutine(DoSomething());
yield return new WaitForSeconds(2f);
StopCoroutine(DoSomething());
}
//一個協(xié)程,不停打印一句話
IEnumerator DoSomething()
{
while (true) {
print("Do Something Loop forever");
yield return null;
}
}
}
錯誤在于StartCoroutine和StopCoroutine操作的并不是同一個協(xié)程。
正確的使用方法如下:
(1)第一種
StartCoroutine("DoSomething");
yield return new WaitForSeconds(2f);
StopCoroutine("DoSomething");
(2)第二種
IEnumerator dosomething = DoSomething();
StartCoroutine(dosomething);
yield return new WaitForSeconds(2f);
StopCoroutine(dosomething);