Unity 协程之三种分析解决StopCorotine终止不了

2025-10-08 03:04:07

1、 打开 Unity,新建一个工程,具体如下图

Unity 协程之三种分析解决StopCorotine终止不了

2、在工程中,新建一个脚本,然后双击或者右键打开脚本,进行编辑,具体如下图

Unity 协程之三种分析解决StopCorotine终止不了

Unity 协程之三种分析解决StopCorotine终止不了

3、首先使用常用的方法,StartCoroutine(Func()),StopCoroutine(Func())的方法开启和停止一个协程,具体代码如下

Unity 协程之三种分析解决StopCorotine终止不了

4、脚本编译正确后,回到Unity界面,在场景中添加一个 GameObject ,把脚本挂载上去,运行场景,在 2 秒打印后,停止协程按钮,发现 5 秒过后,依然有打印,所以这种传统方法停止协程是不行,具体如下图

Unity 协程之三种分析解决StopCorotine终止不了

Unity 协程之三种分析解决StopCorotine终止不了

5、回到代码,编写第二种开启,停止协程的方法,StartCoroutine(“FuncName”),StopCoroutine("FuncName"),然后脚本编译正确后,回到Unity界面,运行场景,在 2 秒打印后,停止协程按钮,发现 5 秒过后,没有了打印,所以这种方法停止协程是可行的,具体如下图

Unity 协程之三种分析解决StopCorotine终止不了

Unity 协程之三种分析解决StopCorotine终止不了

6、回到代码,编写第三种开启,停止协程的方法,IEnumerator wrapFunc,包装一下协程函数,StartCoroutine(wrapFunc),StopCoroutine(wrapFunc),然后脚本编译正确后,回到Unity界面,运行场景,在 2 秒打印后,停止协程按钮,发现 5 秒过后,没有了打印,所以这种方法停止协程是可行的,具体如下图

Unity 协程之三种分析解决StopCorotine终止不了

Unity 协程之三种分析解决StopCorotine终止不了

7、StopCoroutineTest 脚本的具体代码如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class StopCoroutineTest : MonoBehaviour {

    IEnumerator wrapTest;

// Use this for initialization

void Start () {

        wrapTest = Test();

        //StartCoroutine(Test());

        //StartCoroutine("Test");

        StartCoroutine(wrapTest);

}

// Update is called once per frame

void Update () {

        if (Input.GetKeyDown(KeyCode.Space)) {

            //StopCoroutine(Test());

            //StopCoroutine("Test");

            StopCoroutine(wrapTest);

            Debug.Log("StopCoroutine(wrapTest)");

        }

}

    IEnumerator Test() {

        yield return new WaitForSeconds(2.0f);

        Debug.Log("2.0f Print");

        yield return new WaitForSeconds(5.0f);

        Debug.Log("5.0f Print");

    }

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢