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);
    }
}

结果:

相关推荐
uppp»44 分钟前
深入理解 Java 反射机制:获取类信息与动态操作
java·开发语言
玩电脑的辣条哥3 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
CSDN_PBB4 小时前
[STM32 - 野火] - - - 固件库学习笔记 - - - 十五.设置FLASH的读写保护及解除
笔记·stm32·学习
ll7788115 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML7 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅7 小时前
Java语言的云计算
开发语言·后端·golang
lly2024067 小时前
jQuery 杂项方法
开发语言
鸡啄米的时光机7 小时前
vscode的一些实用操作
vscode·学习
赵琳琅7 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式8 小时前
C语言——指针进阶应用
c语言·开发语言