Почему Unity создает sh, когда я перемещаю спрайт по горизонтали? - PullRequest
0 голосов
/ 24 апреля 2020

Я только запустил Unity, и я делал 2D-игру для игрока (спрайт), который стреляет стрелкой, когда я нажимаю указанную кнопку c. Игрок движется вертикально, а стрелка движется горизонтально. Плеер движется нормально, но когда я нажимаю, чтобы стрелять, 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;
    }
}

1 Ответ

3 голосов
/ 24 апреля 2020

Это потому, что у вас есть бесконечный l oop.

            bullet1shot = true;
            while (bullet1shot)
            {
                player[1].transform.Translate(Vector2.left * Time.deltaTime * shotspeed);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...