对于发生的事情非常困惑。我将发布代码,但只是我的游戏的简短描述是太空入侵者混音。我有一个当前在X轴上移动的CPU,当它到达-900f时停止,然后在Z轴上向下移动。现在我试图停止向下移动Z轴(完成),然后沿着相反的X方向移动先前进入(在每次更新时X轴移动7f之前,我希望它每次移动-7f从那时起更新)。我的问题是,现在当它到达指定的Z轴停止时,然后在X轴上移动,它开始移动,但随后在X轴上继续回到-900。在我下面的代码中,你会看到我有程序告诉transform.position.x等于-900f,但是,我把它放在一个if循环中,只有bool值为true才运行该代码,我设置为false在我希望程序忽略显示x位置到-900f的代码之后。
public class InvaderController : MonoBehaviour {
public float resistance;
public int resistcount;
public int numhits;
public float newX; //set to public so I can see it change in Unity, will go private
float newZ;
public float invaderSpeed; //this is set to 7 in Unity
public GameObject Invader;
Quaternion rotation;
public GameObject explosion;
int expcount;
bool firstxoff = false;
bool test = true;
public GameObject explosion2;
// Use this for initialization
void Start () {
}
void Awake() {
firstxoff = true;
}
// Update is called once per frame
void Update () {
if (firstxoff == true)
{
firstmove ();
}
}
void firstmove()
{
Vector3 newPos = transform.position;
newPos.x -= invaderSpeed;
//newX = newPos.x;
transform.position = newPos;
if (newPos.x < -900f)
{
Vector3 newPosZ = transform.position;
newPosZ.z -= invaderSpeed;
float x = -900f;
newX = x;
newPosZ.x = newX;
transform.position = newPosZ;
}
moveX1 ();
}
void moveX1()
{
Vector3 newPos = transform.position;
if (newPos.z < 500f)
{
Vector3 newPosX = transform.position;
newX = newX + invaderSpeed;
float z = 500f;
newZ = z;
newPosX.z = newZ;
newPosX.x = newX;
transform.position = newPosX;
if (newX > 800f)
{
firstxoff = false;
}
}
}
void FixedUpdate() //need to figure out how to run update first, then this.
{
//firstxoff = false;
}
答案 0 :(得分:1)
第一次z小于500,你的x会增加7,对吗?
newX = newX + invaderSpeed;
所以你从-900到-893。 -893不大于800,因此firstxoff不设置为false。然后再次调用firstmove方法。
newPos.x -= invaderSpeed;
X现在是-893减去7,即-900。这个循环将永远重复。 Z将始终为500,x将始终为-900。
希望您能找到解决方案。如果没有,请告诉我。