Не работает SetActive(true) - Unity

У меня есть панель меню паузы. Также у меня есть дополнительный объект на котором висит скрипт, включающий и выключающий панель по нажатию esc(собственно, ниже он и есть).

public GameObject panel;
bool isStopped;

// Start is called before the first frame update
void Start()
{
    panel.gameObject.SetActive(false);        
}

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape) && !isStopped)
    {  
        panel.gameObject.SetActive(true);
        isStopped = true;
        Time.timeScale = 0;
    }
    if (Input.GetKeyDown(KeyCode.Escape) && isStopped)
    {   
        panel.gameObject.SetActive(false);
        isStopped = false;
        Time.timeScale = 1;
    }

}

Долго не могу понять почему не работает SetActive(true). Прошу помочь!


Ответы (1 шт):

Автор решения: CrazyElf

У вас сразу же срабатывает второй if из-за того, что вы переключаете isStopped в первом if. Сделайте через else if, должно починиться тогда:

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape) && !isStopped)
    {  
        panel.gameObject.SetActive(true);
        isStopped = true;
        Time.timeScale = 0;
    }
    else if (Input.GetKeyDown(KeyCode.Escape) && isStopped)
    {   
        panel.gameObject.SetActive(false);
        isStopped = false;
        Time.timeScale = 1;
    }
}

Или наверное вот так будет ещё более понятно:

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape))
    {  
        if(isStopped)
        {   
            panel.gameObject.SetActive(false);
            isStopped = false;
            Time.timeScale = 1;
        }
        else
        {
            panel.gameObject.SetActive(true);
            isStopped = true;
            Time.timeScale = 0;
        }
    }
}

Хотя возможно и это не поможет, если клавиша будет продолжать оставаться нажатой, так и будет туда-сюда переключаться. Я не знаю как это правильно обычно делают в Unity, я бы выставлял какой-то флаг, что событие уже обработано и не давал ему отрабатываться повторно пока клавишу не отпустят.

→ Ссылка