Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 为什么协同程序从IEnumerator继承?_Unity3d - Fatal编程技术网

Unity3d 为什么协同程序从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继承如何使方法表现得像一个协同程序?这一定与编译器有关,对吗

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
。协程中所有变量的当前值称为其“状态”。