StopCoroutine的使用

根据官方文档的解释:
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);

你可能感兴趣的:(StopCoroutine的使用)