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()
coroutine也将停止并销毁ChangeColor()
还有一个警告。不要将协程与多线程混淆。协同程序将在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);
}
}