我是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,但是我不知道怎么做。
答案 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语句。
祝你好运!