我想在x轴上不断地在有限的空间内左右移动一个立方体。但是立方体只能在一个方向上继续移动,就像继续向左移动直到它离开屏幕一样。起始x轴的位置为0.在C#中为Unity3d编写以下代码。谢谢你的建议。
void Update () {
if (transform.position.x < 1)
{
transform.Translate(Vector3.left * 0.1f);
}
else if (transform.position.x > -1)
{
transform.Translate(Vector3.right * 0.1f);
}
}
答案 0 :(得分:4)
这里有两个问题。首先,正如另一个答案所指出的那样,你似乎有你的不到和交换了大于号的符号,所以你总是进入第一个(左)块。
其次,你总是在哪个方向上移动当前位置,这听起来是正确的,但实际上并非如此。你真正想要的是“当前的方向”,无论是什么,除非你处于边缘,在这种情况下“当前的方向”需要逆转。
也就是说,你需要这样的东西:
private Vector3 movement = Vector3.left * 0.1f;
public void Update() {
if (cube.position.x > 1)
movement = Vector3.left * 0.1f;
else if (cube.position.x < -1)
movement = Vector3.right * 0.1f;
transform.Translate(movement);
}
编辑:感谢Chris Hayes指出Vector3不可为空。我对Unity3d并不熟悉,只是遇到了这个普遍的问题。
Edit2:为了进一步澄清,你不能只有2个区域,并说“如果它在这个区域,向左移动,如果它在另一个区域,向右移动。”然后它最终振荡回来&amp;在两个区域的边界上。你需要的是三个区域:
<-- (move right) -->|<-- (keep going same direction) -->|<-- (move left) -->
答案 1 :(得分:1)
所有值.99到-99都小于1,所以你的其他值永远不会被击中。除非你的价值大于1