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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 统一-如何延迟更改颜色?_Unity3d_Delay - Fatal编程技术网

Unity3d 统一-如何延迟更改颜色?

Unity3d 统一-如何延迟更改颜色?,unity3d,delay,Unity3d,Delay,我正在尝试更改主摄像头的背景色。当我把代码放在下面时,它每帧都会改变颜色。为什么会发生这种情况?我怎样才能修好它 function Update () { ChangeColor(); } function ChangeColor() { this.camera.backgroundColor = Color32(Random.Range(0, 255), Random.Range(0, 255), Random.Range(0, 255), 1); yield WaitForSeconds(

我正在尝试更改主摄像头的背景色。当我把代码放在下面时,它每帧都会改变颜色。为什么会发生这种情况?我怎样才能修好它

function Update () {
ChangeColor();
}

function ChangeColor() {
this.camera.backgroundColor = Color32(Random.Range(0, 255), Random.Range(0, 255), Random.Range(0, 255), 1);
yield WaitForSeconds(5);
}

你在找一种叫做

Update()
每秒调用60次。由于在
Update()
方法中有
ChangeColor()
,因此无论
ChangeColor()
方法中的yield语句如何,都将调用它,因为yield只在协同程序内部起作用

您将需要如下方式调用该方法:

StartCoroutine(ChangeColor()); 

请注意,如果将该行放在
Update()
方法中,您将每秒启动60次新的协同程序。如果希望
ChangeColor()
在启动后继续运行,则需要稍微更改其逻辑,并将其放置在
Start()
方法中,或放置在调用一次的位置

    function ChangeColor() {
    while(true){
        this.camera.backgroundColor = Color32(Random.Range(0, 255), Random.Range(0, 255),     Random.Range(0, 255), 1);
        yield WaitForSeconds(5);
        }
    }
您会注意到我添加了一个while循环,它是一个无限循环,在while循环中我放置了yield语句。这将使该方法正确地产生5秒,然后再次循环并永久产生

一些补充说明:

  • 确保您选择了正确版本的
    启动例程(…)
    。可以使用
    StopCoroutine(“NameOfMethod”)
    停止获取字符串的进程。另一个接受方法签名本身的方法在启动后无法停止

  • 协同程序依赖于创建它们的游戏对象脚本。因此,如果您的相机具有调用
    ChangeColor()
    方法的脚本,并且该脚本已被销毁,那么
    ChangeColor()
    coroutine也将停止并销毁

指向其他协同路由方法的链接


还有一个警告。不要将协程与多线程混淆。协同程序将在Unity主循环期间运行。
    function ChangeColor() {
    while(true){
        this.camera.backgroundColor = Color32(Random.Range(0, 255), Random.Range(0, 255),     Random.Range(0, 255), 1);
        yield WaitForSeconds(5);
        }
    }