Не работает 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 шт):
У вас сразу же срабатывает второй 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, я бы выставлял какой-то флаг, что событие уже обработано и не давал ему отрабатываться повторно пока клавишу не отпустят.