当前位置:   article > 正文

unity保姆级教程之协同程序_unity 协同程序实现原理

unity 协同程序实现原理

本文仅作学习笔记分享,不作任何商业用途,侵权删

本文结合唐老狮,unity官方手册,麦扣等教程内容,引用会标明输出,如有不足还请斧正

官方手册:协程 - Unity 手册

1.什么是协同程序

协程允许您将任务分散到多个框架中。在Unity中,协程是一种可以暂停执行并将控制权返回给Unity的方法,但随后在它离开的地方继续执行。

在大多数情况下,当您调用一个方法时,它会运行到完成,然后将控制权返回给调用方法,以及任何可选的返回值。这意味着在方法中发生的任何动作都必须在单个帧更新中发生。

在希望使用方法调用来包含过程动画或随时间变化的事件序列的情况下,可以使用协程。

然而,重要的是要记住协程不是线程。在协程内运行的同步操作仍然在主线程上执行。如果希望减少主线程上花费的CPU时间,避免在协程中阻塞操作与在任何其他脚本代码中一样重要。如果你想在Unity中使用多线程代码,可以考虑使用c#作业系统。

如果需要处理长时间的异步操作,比如等待HTTP传输、资产加载或文件I/O完成,那么最好使用协程。

别看文字这么多,实际上我画个图就明白了:

黑色代表函数的整个生命周期,红色代表其他函数的生命周期

就相当于把一个函数给分步骤,可穿插地执行了

2.unity中的协程(协同程序)

本文以协程函数为例

2.1声明

写成函数需要一个IEnumerable接口作为返回值类型,yiield return关键字作返回

常见可以返回的内容如下:来源于唐老狮笔记

 2.2调用

我在这个函数中写了如下逻辑,对象绕y轴每次顺时针旋转对象30°

调用关键词为startcoroutine,有三个重载,推荐如下这个:

所以 可以直接传入该协程函数:

3.协程原理=协程迭代器(1)+协程调度器(2)

(1):协程迭代器

c#迭代器方法,起暂停作用,就是这玩意:

你可以直接调用其中的方法:

当然obj当前为空,因为yield return是一个方法 obj不能直接存方法,要通过委托

MoveNext会调用一次函数内容,也就是遇到yield return就会停止

(2):协程调度器

unity内部实现方法,会在对应时机调度

比如yield return方法都来源于一个基类,而这个基类内容用户是加密看不到的

4.协程分析

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/1013067
推荐阅读
相关标签
  

闽ICP备14008679号