unity学习笔记——协程

协程方法的一些规则:

1返回值是IEnumerator (注意:不是IEnumerable

2、返回参数时使用yield return ;(任意选择要返回的参数)

3、使用StartCoroutine(method())调用协程方法

协程方法执行顺序:协程方法开启后,会继续运行下面的代码,不会等到协程方法运行结束才继续执行。 

下面是一段典型的协程代码:

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

public class CoroutineStudy : MonoBehaviour
{
    //两条协程可以一起执行,不会冲突
    IEnumerator e;
    Coroutine co;
    
    IEnumerator Start()
    {
        e = CountCo();
        co = StartCoroutine(e);

        for (int i = 1; i <= 10; i++)
        {
            print($"Start i={i}");
            yield return new WaitForSeconds(1);
        }
    }


    IEnumerator CountCo()
    {
        for(int i = 1; i <= 10; i++)
        {
            print($"CountCo i={i}");
            yield return new WaitForSeconds(1);
        }
    }

    
    void Update()
    {
        //StopCoroutine(co);

    }
}
  1. 让程序并行执行的功能,就叫协程。(通过脚本,可以开出来多个程序段)
  2. Unity是个单线程的编程语言。Unity整个引擎是有多个渲染线程,但是调用游戏脚本的时候,unity统一放在一个主线程中进行调度。所以对于我们写的脚本来说,unity是单线程的,故采用协程机制来模拟多线程。协程更像是一种函数调用。

协程调用的函数,不带返回值,IEnumerator是协程的固定用法,对应StartCoroutine来启动协程(这样配合相当于在unity当中登记了一个协程,然后unity会在游戏的每一帧当中定时调用这段协程)

 

启动一个协程:StartCoroutine

停止一个协程:StopCoroutine

暂停协程执行:yield

可以用协程做一个计时器

比如上图中,就可以实现每隔1秒输出一个数

停止协程的做法:

(协程脚本可以随便挂载在场景中的任意一个物体上)禁用脚本不能停止协程;移除脚本(Destory(this))可以停止协程

禁用或销毁协程挂载对象可以停止协程

  1. Start方法可以采用协程形式,只要把返回值改成IEnumerator形式就可以

 

  1. 协程可以等待任何一个返回值为IEnumerator的函数
  2. Unity可以对所有继承自YieldInstruction的类使用协程,即yield关键字对所有继承自YieldInstruction的类都可以起作用
  3. 协程的缺点:

依赖于MonoBehaviour(所有继承MonoBehaviour的类才能使用协程);不能有返回值;回调地狱

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值