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);
        }
    }
}



测试如下所示:


版权声明:本文为博主原创文章,未经博主允许不得转载。

Unity3d Coroutine的Start和Stop

StopCoroutine的几种方法:1.StopCoroutine(string method): StartCoroutine(“Test”); StopCor...
  • yanhui2012
  • yanhui2012
  • 2015年07月06日 15:54
  • 2103

正确使用StopCoroutine

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

stopcoroutine 不起作用

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

unity学习——协程的停止StopCoroutine

StopCoroutine方法和StartCoroutine方法类似,也有两个重载。 void StopCoroutine(string methodName) void StopCoroutin...
  • Ding_zhiyuan
  • Ding_zhiyuan
  • 2017年09月13日 19:18
  • 201

unity3d StopCoroutine 停止协同程序

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

Unity 停止(终止)协程

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

Coroutine

Unity中使用Coroutine需要注意的问题: 1.使用的地方和不能使用的地方: 必须在MonoBehaviour或继承于MonoBehaviour的类中调用 yield coroutine。...
  • appppppen
  • appppppen
  • 2016年09月08日 16:56
  • 1623

协程--Coroutine小记

在unity中,协程是一个特殊的函数,它通过使用yield语句中断执行当前的代码,直到中断指令(YieldInstruction)结束后再接着之前的代码继续执行。 在C#中写协程需要遵循的规则有: ...
  • Willtom
  • Willtom
  • 2016年11月12日 10:08
  • 1962

unity3d协程方法停止不了

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

Unity中巧用协程(Coroutine)做状态机

虽然这个其实在看了2dtoolkit的demo才知道的,我就简化一下让
  • fg5823820
  • fg5823820
  • 2014年05月09日 18:56
  • 6285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:StopCoroutine协程停止
举报原因:
原因补充:

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