unity基础(八)协程

为什么需要协程?

unity线程无法访问unity相关对象的内容

多线程用来做复杂的计算结果。因为主线程的存在,导致副线程不能访问unity中相关对象

但协程可以访问

批量创建时,减少卡顿感。

协同程序

它是假的多线程 它不是多线程

它的主要作用 将代码分时执行

是把可能会让主线程卡顿的耗时逻辑分时的分布执行

继承MonoBehavior的类 都可以开启协程函数

第一步 申明协程函数

协程函数2个关键点

1-1返回值为IEnumerator类型及其子类

1-2函数中通过yield return 返回值 进行返回

协同程序函数 返回值 必须是 IEnumerator或者继承它的类型

cs 复制代码
IEnumerator MyCoroutine (int i, string str)
{
    print(i);
    //协程函数当中必须使用 yield return 进行
    yield return new WaitForSeconds(i);//等待时间 ,该句之前的内容执行后,后面的内容要等5秒后执行
    print(str);
    yield return new WaitForSeconds(i);//时间分割,写几个就相当于把代码分成了几部分

    while (true)
    {
        print(5);
        yield return new WaitForSeconds(5); //写死循环 分布
    }

}

协程函数的开启和关闭

协程函数 是不能这样直接去执行的,这样执行没有任何效果

cs 复制代码
MyCoroutine(1,"123");

开启方式1

cs 复制代码
IEnumerator ie = MyCoroutine(1, "123");
StartCoroutine(ie);

开启方式2

cs 复制代码
StartCoroutine(MyCoroutine(1, "123"));

关闭

cs 复制代码
Coroutine c1= StartCoroutine(MyCoroutine(1, "123"));
Coroutine c2 = StartCoroutine(MyCoroutine(1, "123"));
Coroutine c3  = StartCoroutine(MyCoroutine(1, "123"));

协程的关闭 关闭所有

cs 复制代码
StopAllCoroutines();

关闭指定协程

cs 复制代码
StopCoroutine(c1);
相关推荐
软件黑马王子7 分钟前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
张人玉1 小时前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
1314lay_10071 小时前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
慧都小妮子1 小时前
.NET 报表控件选型对比:Stimulsoft 与 FastReport 怎么选
c#·.net·报表开发·数据可视化·报表控件·报表引擎选型
1314lay_10073 小时前
C#调用Sql Server存储过程,有返回值的
数据库·sqlserver·c#
我是唐青枫4 小时前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
开发语言·c#·.net
Am-Chestnuts4 小时前
AI 生成的数学公式,怎么用 DS随心转 导出成 Word 里能改的公式
人工智能·c#·word
geovindu4 小时前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
古少侠4 小时前
AI 内容粘到 Word 就乱?用 DS随心转 把复制的内容直接变成排版好的一段
人工智能·c#·word
geovindu5 小时前
CSharp: Task Scheduler
开发语言·后端·c#·.net·.netcore