为什么水平移动精灵时Unity会崩溃?

问题描述 投票:-1回答:1

我刚刚启动Unity,当时我正在制作一个2D游戏,当单击特定按钮时,该游戏会射击一个箭头。播放器垂直移动,箭头水平移动。播放器动作正常,但是,当我单击拍摄箭头时,Unity崩溃,因此必须从任务管理器中将其关闭。

代码显示0错误,除Unity以外,其他所有功能都正常。

我不知道问题出在哪里,我将显示整个代码;射箭的功能称为shootingsysytem

void Start()
{
    health = 100;
    playerspeed = 2;
    shotspeed = 3;
    bulletcount = 3;
    playerpos();
    if (delay <= 0)
    {
        delay = 0;
    }
    stopbullets();
}

// Update is called once per frame
void Update()
{
    playermouvement();
    shootingsystem();
    playerpos();
    delay -= Time.deltaTime;
}

public void playermouvement()// works
{
    if (Input.GetKey("z"))
    {
        player[0].transform.Translate(Vector2.up * Time.deltaTime * playerspeed);
    }

    if (Input.GetKey("s"))
    {
        player[0].transform.Translate(Vector2.down * Time.deltaTime * playerspeed);
    }
}// works

public void shootingsystem() // this function shoots the arrows.........
{
    if (Input.GetKey("k"))
    {
        if (bulletcount == 3 & delay <= 0.0f)
        {
            bullet3shot = true;
            while (bullet3shot)
            {
                player[3].transform.Translate(Vector2.left * Time.deltaTime * shotspeed);
            }
            if (delay <= 0.0f)
            {
                bulletcount--;
                delay = 1;
            }
        }
        else if (bulletcount == 2 & delay <= 0.0f)
        {
            bullet2shot = true;
            while (bullet2shot)
            {
                player[2].transform.position += goingside * Time.deltaTime;
            }
            if (delay <= 0.0f)
            {
                bulletcount--;
                delay = 1;
            }
        }
        else if (bulletcount == 1 & delay <= 0.0f)
        {
            bullet1shot = true;
            while (bullet1shot)
            {
                player[1].transform.Translate(Vector2.left * Time.deltaTime * shotspeed);
            }
            if (delay <= 0.0f)
            {
                bulletcount--;
                bulletcount = 3; // remove later 
                delay = 1;
            }
        }
    }
}

public void playerpos()//works
{
    playerposition = player[0].transform.position;
    if (!bullet1shot)
    {
        player[1].transform.position = playerposition;
    }
    if (!bullet2shot)
    {
        player[2].transform.position = playerposition;
    }
    if (!bullet3shot)
    {
        player[3].transform.position = playerposition;
    }
}//works

private void stopbullets()
{
    if (player[1].transform.position.x <= -13) //stop first bullet
    {
        bullet1shot = false;
    }
    if (player[2].transform.position.x <= -13) //stop second bullet
    {
        bullet2shot = false;
    }
    if (player[3].transform.position.x <= -13) //stop third bullet
    {
        bullet3shot = false;
    }
}

c# visual-studio unity3d
1个回答
3
投票

因为您有无限循环。

            bullet1shot = true;
            while (bullet1shot)
            {
                player[1].transform.Translate(Vector2.left * Time.deltaTime * shotspeed);
            }
© www.soinside.com 2019 - 2024. All rights reserved.