Unity3d 为什么协同程序从IEnumerator继承?
从IEnumerator继承如何使方法表现得像一个协同程序?这一定与编译器有关,对吗Unity3d 为什么协同程序从IEnumerator继承?,unity3d,Unity3d,从IEnumerator继承如何使方法表现得像一个协同程序?这一定与编译器有关,对吗 IEnumerator Fade() { for (float ft = 1f; ft >= 0; ft -= 0.1f) { Color c = renderer.material.color; c.a = ft; renderer.material.color = c; yield return null; }
IEnumerator Fade()
{
for (float ft = 1f; ft >= 0; ft -= 0.1f)
{
Color c = renderer.material.color;
c.a = ft;
renderer.material.color = c;
yield return null;
}
}
据介绍,IEnumerator
只是一个用于迭代对象集合的有用接口。它定义了一个MoveNext()
方法和一个Reset()
方法,用于导航它附加到的集合。协同路由可以跨多个帧执行,因此Unity可能会使用IEnumerator在每个帧的进程中迭代协同路由的状态更改
您可以在Unity的源代码中的
monobhavior
绑定中找到协程方法的声明。Unity避免让用户使用Thread
,以便解决他们使用IEnumerator的异步性(使用yield
)所以用户不会阻塞主线程,可以控制代码的执行频率谢谢!我英语不好,所以请你澄清一下“协同程序的状态更改”是什么意思?@PetroKoval在一帧中,你的Fade()
协同程序的本地ft
变量可能等于0.9
。但在下一帧中,它将等于0.8
。协程中所有变量的当前值称为其“状态”。