unity3d————协程原理讲解

1.协程的本质

协程可以分成两部分

1.协程函数本体
2.协程调度器

协程本体就是一个能够中间暂停返回的函数

协程调度器是Unity内部实现的,会在对应的时机帮助我们继续执行协程函数

Unity只实现了协程调度部分

协程的本体本质上就是一个 C#的迭代器方法

2.协程本体是迭代器方法的体现

1.协程函数本体

如果我们不通过 开启协程方法执行协程
Unity的协程调度器是不会帮助我们管理协程函数的

2.协程调度器

继承MonoBehavior后 开启协程
相当于是把一个协程函数(迭代器)放入Unity的协程调度器中帮助我们管理进行执行
具体的yield return 后面的规则 也是Unity定义的一些规则

总结

你可以简化理解迭代器函数
C#看到迭代器函数和yield return 语法糖
就会把原本是一个的 函数 变成"几部分"
我们可以通过迭代器 从上到下遍历这 "几部分"进行执行
就达到了将一个函数中的逻辑分时执行的目的

而协程调度器就是 利用迭代器函数返回的内容来进行之后的处理

比如Unity中的协程调度器
根据yield return 返回的内容 决定了下一次在何时继续执行迭代器函数中的"下一部分"

理论上来说 我们可以利用迭代器函数的特点 自己实现协程调度器来取代Unity自带的调度器

3.总结

协程的本质 就是利用

C#的迭代器函数"分步执行"的特点
加上
协程调度逻辑
实现的一套分时执行函数的规则

4.代码示例

cs 复制代码
public class TestClass
{
    public int time;
    public TestClass(int time)
    {
        this.time = time;
    }
}

public class xiechengyuanli : MonoBehaviour
{
    IEnumerator Test()
    {
        print("第一次执行");
        yield return 1;
        print("第二次执行");
        yield return 2;
        print("第三次执行");
        yield return "123";
        print("第四次执行");
        yield return new TestClass(10);
    }
    void Start()
    {
        IEnumerator e = Test();
        while(e.MoveNext())
        {
            print(e.Current);
        }

        TestClass test = e.Current as TestClass;
        print("time = " + test.time);
    }
}

结果:

相关推荐
小老鼠爱大米2 分钟前
C# WPF - Prism 学习篇:搭建项目(一)
c#·wpf·prism
chao_7891 小时前
回溯题解——子集【LeetCode】二进制枚举法
开发语言·数据结构·python·算法·leetcode
尘世闲鱼3 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
wuxuanok3 小时前
Web后端开发-分层解耦
java·笔记·后端·学习
纨妙3 小时前
python打卡day59
开发语言·python
wuxuanok3 小时前
Web后端开发-请求响应
java·开发语言·笔记·学习
Thomas_YXQ3 小时前
Unity3D游戏内存优化指南
游戏·unity·职场和发展·性能优化·蓝桥杯·游戏引擎·unity3d
i7i8i9com4 小时前
后端微服务基础架构Spring Cloud
学习
Sally璐璐4 小时前
IPSAN 共享存储详解:架构、优化与落地实践指南
开发语言·php