Unity:不止一次使用yield waitforseconds

时间:2015-01-04 19:09:17

标签: unity3d unityscript

想法是每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()时都等待。

1 个答案:

答案 0 :(得分:0)

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