Unity3d:尝试前后移动对象

时间:2018-09-15 20:39:49

标签: unity3d

我是Unity的新手,正在尝试找到一种方法来将块向前移动一段指定的时间,然后在相同的时间内使其回到起始位置。我正在使用Time.deltaTime来将块移动一定的时间,这确实可行。但是,一旦countDown变量达到0,并且对象必须开始移动回到其原始位置,该对象就会停止移动,我不确定为什么。

public class Problem1 : MonoBehaviour { 
    float countDown = 5.0f;

    // Use this for initialization
    void Start () {

    }

    void Update () {
        transform.position += Vector3.forward * Time.deltaTime;
        countDown -= Time.deltaTime;

        if (countDown <= 0.0f)
            transform.position += Vector3.back * Time.deltaTime;
 }
}

我可以肯定我没有正确使用Vector3.back,但是我不知道怎么做。

2 个答案:

答案 0 :(得分:2)

这是因为您正在同时向前和向后移动对象。 您只想在countDown大于0时将其向前移动。
这是您需要的代码:

public class Problem1 : MonoBehaviour { 
    float countDown = 5.0f;

    // Use this for initialization
    void Start () {

    }

    void Update () {
        countDown -= Time.deltaTime;

        if(countDown > 0)
            transform.position += Vector3.forward * Time.deltaTime;
        else if (countDown > -5.0f) // You don't want to move backwards too much!
            transform.position += Vector3.back * Time.deltaTime;
 }
}

答案 1 :(得分:1)

该对象停止移动,因为一旦countDown达到0.0f,您仍将其向前移动,但同时还将其向后移动。

换句话说,您正在运行的代码基本上可以做到这一点:

if (countDown > 0.0f) {
    transform.position += Vector3.forward * Time.deltaTime;
    countDown -= Time.deltaTime;
} else if (countDown <= 0.0f) {
    transform.position += Vector3.forward * Time.deltaTime;
    transform.position += Vector3.back * Time.deltaTime;
    countDown -= Time.deltaTime;

我建议这样运行您的代码:

public class Problem1 : MonoBehaviour { 
float countDown = 5.0f;

// Use this for initialization
void Start () {

}

void Update () {
    if (countDown > 0.0f) {
    transform.position += Vector3.forward * Time.deltaTime;
    countDown -= Time.deltaTime;
}

    else if (countDown <= 0.0f) {
        transform.position += Vector3.back * Time.deltaTime;
    countDown += Time.deltaTime;
    }
}
}

实际上,在else if语句所在的地方,else语句可能会更好地工作,但是为了清楚起见,我将其设为else if语句。

祝你好运!