StopCoroutine协程停止

原创 2017年01月08日 20:22:49

说明:


本篇文章总结一下停止协程的方法,O(∩_∩)O哈哈哈~

步入正路:

Unity所提供的停止协程的接口:
 //
        // 摘要:
        //     ///
        //     Stops all coroutines running on this behaviour.
        //     ///
        [WrapperlessIcall]
        public void StopAllCoroutines();
        //
        // 摘要:
        //     ///
        //     Stops the first coroutine named /methodName/, or the coroutine stored in /routine/
        //     running on this behaviour.
        //     ///
        //
        // 参数:
        //   methodName:
        //     Name of coroutine.
        //
        //   routine:
        //     Name of the function in code.
        [WrapperlessIcall]
        public void StopCoroutine(string methodName);
        //
        // 摘要:
        //     ///
        //     Stops the first coroutine named /methodName/, or the coroutine stored in /routine/
        //     running on this behaviour.
        //     ///
        //
        // 参数:
        //   methodName:
        //     Name of coroutine.
        //
        //   routine:
        //     Name of the function in code.
        public void StopCoroutine(IEnumerator routine);
        public void StopCoroutine(Coroutine routine);

StopAllCoroutines():

用于停止当前脚本的所有协程

public void StopCoroutine(string methodName);

停止当前脚本中的某一个协程,通过协程的方法名查找并停止:
如下所示:
using UnityEngine;
using System.Collections;

/// <summary>
///测试 public void StopCoroutine(string methodName);
/// </summary>
public class TestHHH : MonoBehaviour
{
    void Start()
    {
        //必须是——StartCoroutine(string methodName)方式
        StartCoroutine("testStartCor");
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //对应——StartCoroutine(string methodName)方式
            StopCoroutine("testStartCor");
        }
    }

    IEnumerator testStartCor()
    {
        var cout = 0;
        while (true)
        {
            yield return new WaitForSeconds(1);
            cout++;
            Debug.Log("StartCoroutine:" + cout);
        }
    }
}
局限性:StartCoroutine("testStartCor")中不能带参数,也就是testStartCor不能有参数,否则会报错:
Failed to call function testStartCor of class TestHHH
Calling function testStartCor with no parameters but the function requires 1.
UnityEngine.MonoBehaviour:StartCoroutine(String)

public void StopCoroutine(IEnumerator routine);

解决带参数的情况:
如下所示:
using UnityEngine;
using System.Collections;

/// <summary>
///测试 public void StopCoroutine(IEnumerator routine);
/// </summary>
public class TestHHH : MonoBehaviour
{
    IEnumerator helloIenumeratro;
    void Start()
    {
        //必须是——StopCoroutine(IEnumerator routine)方式
        helloIenumeratro = testStartCor("今天的天气哈哈哈");
        StartCoroutine(helloIenumeratro);
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //对应——StopCoroutine(IEnumerator routine)方式
            StopCoroutine(helloIenumeratro);
            Debug.Log("已经停止协程");
        }
    }

    IEnumerator testStartCor(string ss)
    {
        var cout = 0;
        while (true)
        {
            yield return new WaitForSeconds(1);
            cout++;
            Debug.Log("StartCoroutine:" + cout+"  "+ss);
        }
    }
}



测试如下所示:


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aiyan1111111/article/details/54236301

Unity 停止(终止)协程

测试一下停止协程是如何使用,准备如下脚本,并将该脚本挂在场景中任何一个物体上测试发现: 再次运行场景,接着就立即点击鼠标左键,测试结果如下: FR:海涛高软(QQ技术群:386476712)...
  • qq_15267341
  • qq_15267341
  • 2016-11-06 11:30:42
  • 9534

unity3d协程方法停止不了

使用 StartCoroutine(DoSomething()); 开启协程,发现使用 StopCoroutine(DoSomething()); 停止不了,看API原来是因为: 请注意只有...
  • egostudio
  • egostudio
  • 2015-07-23 19:10:56
  • 4207

Unity3d Coroutine的Start和Stop

StopCoroutine的几种方法:1.StopCoroutine(string method): StartCoroutine(“Test”); StopCor...
  • yanhui2012
  • yanhui2012
  • 2015-07-06 15:54:47
  • 2483

正确使用StopCoroutine

三种开启协程的方式,对应三种关闭协程的方式。using UnityEngine; using System.Collections;public class Test : MonoBehaviour ...
  • mengfanye1991
  • mengfanye1991
  • 2016-06-28 20:29:13
  • 938

unity3d StopCoroutine 停止协同程序

function StopCoroutine (methodName : string) : void Description描述 停止这个动作中名为methodName的所有协同程序。 ...
  • fzhlee
  • fzhlee
  • 2013-02-21 14:55:47
  • 8177

Unity3D中的Coroutine详解

Unity中的Coroutine原理猜测:虚拟机分段执行机制, 同类型嵌套用栈存放实现串行执行. Unity中使用yield Coroutine需要注意的问题...
  • Blues1021
  • Blues1021
  • 2014-11-09 23:29:33
  • 45875

关于Unity3D协程的使用

开辟线程的方法在Unity里面不是非常好使,如果需要做一些异步操作官方是提供了协程来处理的,但是官方的协程文档写的和没有写一样,这里我想强烈吐槽下... 不方便截图,给官方的协程文档网址。里面只告诉...
  • lirentai
  • lirentai
  • 2016-03-19 23:13:33
  • 2364

stopcoroutine 不起作用

请注意只有StartCoroutine使用一个字符串方法名时才能用StopCoroutine停用之.
  • microsoftMSDNNET
  • microsoftMSDNNET
  • 2015-08-02 17:52:41
  • 2194

Unity里如何停掉Coroutine, Invoke的函数的执行,以及脚本的Start()和Update()

先列出所有可选的方法: StopAllCoroutines();  //只对Coroutine起作用,会停掉此脚本里所有的Coroutine。 this.enable = false;   // ...
  • u010153703
  • u010153703
  • 2014-08-25 18:36:12
  • 3950

Unity协程(Coroutine)使用时需要注意的地方,协程异常中断,异常停止执行的一种可能性

根据个人使用经验,总结出来只有一点需要着重注意的地方, 那就是 协程运行时,所在的脚本和这个脚本所在的物体都必须是激活的,也就是说,它的父物体,父物体的父物体...都要是激活的。 在使用...
  • qq_28768929
  • qq_28768929
  • 2016-11-14 11:39:31
  • 2929
收藏助手
不良信息举报
您举报文章:StopCoroutine协程停止
举报原因:
原因补充:

(最多只允许输入30个字)