Unity3d 统一:多次使用yield waitforseconds

Unity3d 统一:多次使用yield waitforseconds,unity3d,unityscript,Unity3d,Unityscript,这个想法是为REGENATE()每2秒创建一个延迟,这样我就可以给玩家2秒的时间来捕捉scoreObject,否则它会传送到随机坐标 问题是在第一个循环之后,产生WaitForSeconds(2)被忽略,使scoreObject不可触摸 #pragma strict public var scoreObject : GameObject; function Update () { Regenerate(); } function Regenerate () { yield

这个想法是为REGENATE()每2秒创建一个延迟,这样我就可以给玩家2秒的时间来捕捉scoreObject,否则它会传送到随机坐标

问题是在第一个循环之后,
产生WaitForSeconds(2)被忽略,使scoreObject不可触摸

#pragma strict

public var scoreObject : GameObject;

function Update () {
    Regenerate();
}

function Regenerate () {
    yield WaitForSeconds(2);
    scoreObject.transform.position.z = Random.Range(-6.0, 6.0);
    scoreObject.transform.position.x = Random.Range(-4.5, 4.5);
}

有没有办法解决这个问题?我希望每次使用REGENATE()时,这种等待都能起作用。

问题是您在每一帧上都启动了新的
WaitForSeconds
。因此,在2秒钟之后,几乎每一帧都有一次等待结束。您可以使用布尔变量解决此问题,方法是仅在布尔变量为
true
时执行
regenate()
,并在等待时将其设置为
false

#pragma strict

public var scoreObject : GameObject;

var doRegenerate = true;

function Update () {
    if(doRegenerate) {
        Regenerate();
    }
}

function Regenerate () {
    doRegenerate = false;
    yield WaitForSeconds(2);
    doRegenerate = true;
    scoreObject.transform.position.z = Random.Range(-6.0, 6.0);
    scoreObject.transform.position.x = Random.Range(-4.5, 4.5);
}