在学习unity的过程中会遇到“协程”的概念,听到协程我们脑海里应该会想到它
当然不是一个东西,两者可以说不相干,下面就讲一下什么是unity中的协程。
我们先看下官网手册上是怎么说的:
协程就像一个函数,能够暂停执行并将控制权返还给 Unity,然后在下一帧继续执行。
没错,在Unity中,协程是一种特殊的函数,能够在其执行过程中暂停并在稍后恢复。与常规函数不同,协程允许你在执行过程中等待一段时间、等待某个条件满足或者在每一帧执行一些操作。
我们还是先看下官网手册怎么说的:
在 C# 中,声明协程的方式如下:
此协程本质上是一个用返回类型 IEnumerator 声明的函数,并在主体中的某个位置包含 yield return 语句。yield return null 行是暂停执行并随后在下一帧恢复的点。
看完之后是不是会觉得,不就是个private IEnumerator Fade(){}
函数么,函数内容是制作颜色渐变效果,返回类型显而易见是IEnumerator
,这就是协程,一个特殊返回类型的函数。
学过vue的应该更好的理解,因为这跟vue中的async、await
是一样一样的,无非就是对应的换成了IEnumerator、yield
声明完了怎么运行呢?这里还要用到StartCoroutine()
函数
要将协程设置为运行状态,必须使用 StartCoroutine 函数:
到这里你已经可以基本掌握并使用协程了。
协程的引入丰富了Unity中的编程模型。
主要作用可以分为以下几点:
Update
方法。下面我们再说一下协程的各自优缺点
协程中还可以搭配 WaitForSeconds()
函数来引入时间延迟
IEnumerator DelayedExecution()
{
Debug.Log("开始执行");
yield return new WaitForSeconds(3f);
Debug.Log("三秒后执行");
}
IEnumerator FadeIn(Image image, float duration)
{
float timer = 0f;
Color startColor = image.color;
Color targetColor = new Color(startColor.r, startColor.g, startColor.b, 1f);
while (timer < duration)
{
image.color = Color.Lerp(startColor, targetColor, timer / duration);
timer += Time.deltaTime;
yield return null;
}
image.color = targetColor;
}
Unity中的协程是一种处理时间、动画和异步操作的强大工具。它们使得编写复杂的、依赖时间和顺序的逻辑变得更加容易。协程的引入提高了代码的可读性和可维护性,同时使得游戏开发更加灵活和响应式。
掌握协程unity进阶学习中不可或缺的一部分,通过灵活的使用协程,能够更好地处理游戏中的异步任务、动画效果以及其他需要时间管理的操作。
下期见,拜拜!