根据官方文档的解释:
MonoBehaviour.StopCoroutine
使用StopCoroutine时,有两种用法:
public void StopCoroutine(string methodName);
public void StopCoroutine(IEnumerator routine);
前者是使用方法名字符串,后者是使用方法的引用。
前者可以停止第一个名字为methodName的协程;后者可以准确地停止你引用的那个协程。
常犯的错误是:并没有将协程方法赋给一个引用,如下例:
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());
}
//一个协程,不停打印一句话
IEnumerator DoSomething()
{
while (true) {
print("Do Something Loop forever");
yield return null;
}
}
}
错误在于StartCoroutine和StopCoroutine操作的并不是同一个协程。
正确的使用方法如下:
(1)第一种
StartCoroutine("DoSomething");
yield return new WaitForSeconds(2f);
StopCoroutine("DoSomething");
(2)第二种
IEnumerator dosomething = DoSomething();
StartCoroutine(dosomething);
yield return new WaitForSeconds(2f);
StopCoroutine(dosomething);
网友评论