程序员

Unity协程(Coroutine)实践笔记

作者:admin 2021-05-13 我要评论

做Unity项目用 协程 用了段时间在完全黑盒的情况下摸索出了一些 协程 的性质。写篇文记录一下。 要启动一个协程需要调用 StartCoroutine() 函数 这个函数只有一...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

做Unity项目用协程用了段时间,在完全黑盒的情况下摸索出了一些协程的性质。写篇文记录一下。

  1. 要启动一个协程,需要调用StartCoroutine()函数,这个函数只有一个参数,类型为IEnumerator。即以一个迭代器为参数。
  2. 直接将容器的迭代器传给StartCoroutine()暂时没有认识到有什么用处。
  3. Unity的协程主要利用的是C#的一个语法糖:返回值为IEnumerator的函数会直接返回一个迭代器。每一次调用迭代器的MoveNext方法时,函数只会执行到遇到的第一个yield return处,并在下一次调用MoveNext的时候从这个yield return开始执行,直到往后碰到yield return或者到函数结束再跳出函数。
  4. yield return可以返回null,也可以返回一个协程。返回null时会在下一帧中直接再次进入协程函数;返回协程时会等待这个协程执行完毕再继续执行。因此可以把小的协程连成一个大协程,让一些动画效果顺序执行:
IEnumerator Combine()
{
	yield return Anim1();
	yield return Anim2();
	yield return Anim3();
	// ...
	yield return AnimN();
}
  1. 因此根据上述描述,我们可以把Update函数放到一个协程中,其运行规律和MonoBehavior的Update应该是一致的:
void Start()
{
	StartCoroutine(UpdateRunner());
}

IEnumerator UpdateRunner()
{
	while (true)
	{
		MyUpdate();
		yield return null;
	}
}

void MyUpdate()
{
}
  1. 协程的本质是状态机的语法糖,所以协程并非必需。但是妥善运用好协程可以减少代码量。
;原文链接:https://blog.csdn.net/qq_17769475/article/details/115484569

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Unity协程(Coroutine)实践笔记

    Unity协程(Coroutine)实践笔记

  • 学会这20+个JavaScript单行代码,可以

    学会这20+个JavaScript单行代码,可以

  • 安卓应用和ios应用下载地址生成一个统

    安卓应用和ios应用下载地址生成一个统

  • 地质灾害检测需要了解些什么

    地质灾害检测需要了解些什么

腾讯云代理商
海外云服务器