Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity C#bool一直在变为现实_C#_Unity3d - Fatal编程技术网

Unity C#bool一直在变为现实

Unity C#bool一直在变为现实,c#,unity3d,C#,Unity3d,对正在发生的事情非常困惑。我将发布代码,但只是简单描述一下我的游戏是一个太空入侵者混音。我有一个CPU,它当前在X轴上移动,当它达到-900f时停止,然后在Z轴上向下移动。现在我试着停止在Z轴上向下移动(完成),然后向相反的X方向移动,这是之前的情况(在X轴每次更新移动7f之前,我希望它从该点向前移动-7f每次更新)。我的问题是,现在当它击中指定的Z轴停止,然后在X轴上移动,它开始移动,但在X轴上继续返回到-900。在我下面的代码中,你会看到我有一个程序告诉transform.position.

对正在发生的事情非常困惑。我将发布代码,但只是简单描述一下我的游戏是一个太空入侵者混音。我有一个CPU,它当前在X轴上移动,当它达到-900f时停止,然后在Z轴上向下移动。现在我试着停止在Z轴上向下移动(完成),然后向相反的X方向移动,这是之前的情况(在X轴每次更新移动7f之前,我希望它从该点向前移动-7f每次更新)。我的问题是,现在当它击中指定的Z轴停止,然后在X轴上移动,它开始移动,但在X轴上继续返回到-900。在我下面的代码中,你会看到我有一个程序告诉transform.position.x等于-900f,但是,我把它放在一个if循环中,只有当bool值为true时才运行该代码,在我希望程序忽略显示x位置为-900f的代码后,我将其设置为false

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。一旦我这样做,它就工作了。尽管我感谢您花费的时间尝试提供帮助。根据您的代码,我所说的是正确的。您更改了代码,因此问题发生了变化。他实际上从未问过问题。这意味着他对自己的代码为什么要这样做感到困惑。