Unity协程(Coroutine)实践笔记

本文探讨了Unity中协程的使用技巧,包括StartCoroutine的迭代器传递、IEnumerator的特性、协程作为状态机的应用,以及如何通过yieldreturn连接动画顺序执行。重点讲解了如何在Update中使用协程模拟常规逻辑。
摘要由CSDN通过智能技术生成

做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. 协程的本质是状态机的语法糖,所以协程并非必需。但是妥善运用好协程可以减少代码量。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值