@Default_Nickname

Почему Юнити зависает при цикле While?

private void Start()
    {
        game = false;       //игра не началась
        Reset();     //вот в этом проблема
    }

    private void Update()                 //просто задает направление
    {
        if (Input.GetKeyDown(KeyCode.W)) dir = Vector2.up;                
        else if (Input.GetKeyDown(KeyCode.S)) dir = Vector2.down;
        else if (Input.GetKeyDown(KeyCode.D)) dir = Vector2.right;
        else if (Input.GetKeyDown(KeyCode.A)) dir = Vector2.left;        
    }

    IEnumerator Move()          //создает "хвост", перемещает игрока и ждет полсекунды 
    {
        while (true)
        {
            Instantiate(prefab, transform.position = new Vector2(transform.position.x, transform.position.y), Quaternion.identity);
            transform.Translate(dir.x * transform.localScale.x, dir.y * transform.localScale.y, 0);      
            yield return new WaitForSeconds(0.5f);
        }
    }

    private void Reset()               //сбрасывает все и вся(в случае смерти)
    {
        transform.position = new Vector2(0, 0);          //перемещает игрока в центр и устанавливает длину 0
        length = 0;
        while (game == false)                                     //если игра не началась, надо нажать на клавишу W и все заработает,
        {                                                                     // но Юнити просто зависает намертво при запуске самой игры, здесь же 
            if(Input.GetKeyDown(KeyCode.W))             //нет бесконечного цикла, почему так?
            {
                game = true;
                length = 3;
                StartCoroutine(Move());
            }
        }
    }
  • Вопрос задан
  • 317 просмотров
Решения вопроса 1
Start, как и Update выполняется в пределах одного кадра.
Делай эту проверку, которую ты делаешь сейчас, внутри Update.
Без while

//нет бесконечного цикла, почему так?

Есть же.
Если условие выхода никогда не будет достигнуто - значит цикл вечный
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы