Unity C#bool一直在变为现实
对正在发生的事情非常困惑。我将发布代码,但只是简单描述一下我的游戏是一个太空入侵者混音。我有一个CPU,它当前在X轴上移动,当它达到-900f时停止,然后在Z轴上向下移动。现在我试着停止在Z轴上向下移动(完成),然后向相反的X方向移动,这是之前的情况(在X轴每次更新移动7f之前,我希望它从该点向前移动-7f每次更新)。我的问题是,现在当它击中指定的Z轴停止,然后在X轴上移动,它开始移动,但在X轴上继续返回到-900。在我下面的代码中,你会看到我有一个程序告诉transform.position.x等于-900f,但是,我把它放在一个if循环中,只有当bool值为true时才运行该代码,在我希望程序忽略显示x位置为-900f的代码后,我将其设置为falseUnity C#bool一直在变为现实,c#,unity3d,C#,Unity3d,对正在发生的事情非常困惑。我将发布代码,但只是简单描述一下我的游戏是一个太空入侵者混音。我有一个CPU,它当前在X轴上移动,当它达到-900f时停止,然后在Z轴上向下移动。现在我试着停止在Z轴上向下移动(完成),然后向相反的X方向移动,这是之前的情况(在X轴每次更新移动7f之前,我希望它从该点向前移动-7f每次更新)。我的问题是,现在当它击中指定的Z轴停止,然后在X轴上移动,它开始移动,但在X轴上继续返回到-900。在我下面的代码中,你会看到我有一个程序告诉transform.position.
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;
}
公共类入侵控制器:单行为{
公众抵制;
公众参与人数;
公共国际货币基金组织;
public float newX;//设置为public以便我可以看到它在Unity中的更改,将变为私有
浮动纽兹;
public float inverspeed;//在Unity中设置为7
公共游戏对象入侵者;
四元数旋转;
公开游戏对象爆炸;
int-expcount;
bool firstxoff=false;
布尔检验=真;
公开游戏对象爆炸2;
//用于初始化
无效开始(){
}
无效唤醒(){
firstxoff=true;
}
//每帧调用一次更新
无效更新(){
if(firstxoff==true)
{
第一步();
}
}
void firstmove()
{
Vector3 newPos=变换位置;
newPos.x-=入侵速度;
//newX=newPos.x;
transform.position=newPos;
如果(新位置x<-900f)
{
Vector3 newPosZ=transform.position;
newPosZ.z-=入侵速度;
浮动x=-900f;
newX=x;
newPosZ.x=newX;
transform.position=newPosZ;
}
moveX1();
}
void moveX1()
{
Vector3 newPos=变换位置;
如果(新位置z<500f)
{
Vector3 newPosX=transform.position;
newX=newX+入侵速度;
浮子z=500f;
newZ=z;
newPosX.z=newZ;
newPosX.x=newX;
transform.position=newPosX;
如果(newX>800f)
{
firstxoff=false;
}
}
}
void FixedUpdate()//首先需要弄清楚如何运行更新,然后是这个。
{
//firstxoff=false;
}
第一次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
希望您能找到解决方案。如果没有,请告诉我。您可能指的是哪一个是游戏引擎。是Microsoft的IOC框架。是的,对不起,谢谢您的编辑。“希望您能找到解决方案。”您的回答应该提供此解决方案,不是吗?我很愚蠢,没有检查我的一个数字。我的如果(newX>800f){firstxoff=false;}代码行,我将其更改为-900f。一旦我这样做,它就工作了。尽管我感谢您花费的时间尝试提供帮助。根据您的代码,我所说的是正确的。您更改了代码,因此问题发生了变化。他实际上从未问过问题。这意味着他对自己的代码为什么要这样做感到困惑。