Unity 协程的一些基本用法及测试(二)

上一章介绍了通过函数的方式启动的协程,这一章我们测试一下用函数名启动的协程,代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CorTest : MonoBehaviour {
    
    private void Start()
    {
        StartCoroutine("Normal");
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.J))
        {
            Debug.Log("【CorTest】Update 按下j键");
            StopCoroutine("Normal");
        }
    }

    IEnumerator Normal()
    {
        int f = 0;
        while (true)
        {
            yield return new WaitForSeconds(1f);
            f++;
            Debug.Log(string.Format("【CorTest】Normal 运行一次协程,f值:" + f));
        }
    }
}

同样的, 停止我们测试 两种方式,先看 第一种,用函数名停止的方式:

结果表明,用这种方法停止协程是可行的,那么用函数停止的方法呢?修改代码后再测试:

可以看到,并没有作用。。。那么至此我们可以推测:不管用何种方式启动协程,都不能通过函数的方式去结束它。

因为这里还只是测试了无参数的情况,为了更加可靠,接下来还需要测试一下多参数的情况(当然,还有一种上一章节用到的用变量停止的方式这里没有说,大家可以自行测试,结果肯定是能够停止的),修改代码如下,接下来一些小地方就不再粘贴测试结果了:

 停止协程的方式我们还是先说用函数名形式停止的情况, 停止代码是:StopCoroutine("Normal"); //不需要写上参数(函数都只允许你传入一个参数。。。)结果是可以停止协程。

而使用函数的形式停止,代码是:StopCoroutine(Normal("TestCor"));//这里 必须带参数了(毕竟Normal是一个有参数的函数。。。)结果是不可以停止协程。

后面的结果已经可以想见了,但是我还是不放心,接着就像测试一下两个参数以及带委托的参数的情况,然而很快你就会发现,用函数名启动的方式不允许传入 一个以上的参数。。。这也就是说你 想启动带一个以上参数的协程就必须 使用上一章提到的方式,且停止方法只能是用变量来停止。既然两个参数不用测试了,那么就测试一下参数是委托的形式怎么办:

首先在编码过程中你就 会发现, 用函数名启动的 方式,参数不能用lambda表达式,所以你只有怪怪地去定义委托变量去赋值,这里用自定义的委托来测试:

结果当然是可以停止的, 且输出的代码与上一章的测试一样:

总结:

通过函数名的形式启动的协程,无法通过 函数的形式去结束,但是可以通过函数名的形式去结束,而用这种方式启动的协程最多允许带有一个参数(参数是委托的情况下,不允许使用lambda表达式)而想要使用带多个参数的协程,就只有使用第一章 讲到的用函数的方式去启动,并通过变量去 停止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值