Unity:不止一次使用 yield waitforseconds

Unity: using yield waitforseconds more than once

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

问题是在第一个循环之后,yield 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);
}

有什么办法可以解决这个问题吗?我希望每次使用 Regenerate() 时都能等待。

问题是您在每一帧都开始新的 WaitForSeconds。所以 2 秒后几乎每一帧都有一个等待结束。您可以使用布尔变量修复此问题,方法是仅在 true 时执行 Regenerate() 并在等待时将其设置为 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);
}