Кнопки, не реагирующие после того, как были установлены неактивными и повторно активированными - PullRequest
0 голосов
/ 02 января 2019

Я использую Unity 2019.1.1a и считаю, что он все еще в бета-версии. Я разрабатываю 2D игру. В любом случае, я сохранил все свои элементы пользовательского интерфейса внутри пустого игрового объекта на холсте.

Quit-UI - пустой игровой объект. Я установил его неактивным с самого начала, что заставляет весь GUI исчезать как положено.

[Header("UI Quit Controls")]
[SerializeField]
private GameObject quitImg;
[SerializeField]
private Button exit, resume;

private void Start()
{
    player = GetComponent<Rigidbody2D>();
    quitImg.SetActive(false);

}

quitImg установлен в моем инспекторе как пустой игровой объект Quit-UI.

enter image description here

Quit-BG - это мое красное фоновое изображение пользовательского интерфейса, а Quit-FG - мое черное переднее изображение, а QuitTxt - это мое текстовое изображение «Хотите выйти», а не текстовый интерфейс. enter image description here

Этот пользовательский интерфейс активируется внутри функции обновления при нажатии Escape. Это действие раскрывает все связанные пользовательские интерфейсы, поскольку игровой объект имеет значение true:

 void Update()
      {

          if (Input.GetKeyDown(KeyCode.Escape))
    {

        quitImg.SetActive(true);           

    }

        }

У меня есть кнопки OnClick (), настроенные на функции внутри моего скрипта PlayerMove. Кнопка выхода из игры:

enter image description here

  public void ExitGame()
{

    SceneManager.LoadScene(1);

}

Кнопка возобновить игру:

enter image description here

  public void ResumeGame()
{

    quitImg.SetActive(false);
    exit.enabled = false;
    resume.enabled = false;

}

Так что моя проблема в том, что кнопки не реагируют на нажатия. Почему это происходит и как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Это действительно выбило мой мозг!Однако решение было очень и очень простым.(Мне потребовалось целую вечность, чтобы выяснить проблему, смеется)

Я удалил свою систему событий, и я понятия не имел, что это было.Чтобы это исправить, я щелкнул правой кнопкой мыши на холсте, выбрал пользовательский интерфейс и EventSystem.Функциональность кнопок вернулась, и код работает до совершенства.

0 голосов
/ 02 января 2019

Я всегда использую такую ​​структуру для включения и отключения панелей и кнопок, и у меня никогда не было проблем.

Единственный момент, когда я вижу проблему в вашем коде, это то, что когда вы делаете ResumeGame, вы отключаете оба Button компонента

exit.enabled = false;
resume.enabled = false;

но вы никогда не включите их снова.

Однако вы по-прежнему можете видеть их пользовательский интерфейс, поскольку компонент Image не отключен.

Чтобы вообще избежать такого рода «недоразумений», лучше использовать свойство кнопок interactable, например

exit.interactable = false;
resume.interactable = false;

Это сохраняет компонент Button нетронутым, не кликабельным, а визуально «заблокированным», например, по умолчанию серым цветом. Это намного лучше как с точки зрения пользователя, так и разработчика.


Однако в вашем случае кнопки являются дочерними элементами отключаемого вами объекта

=> Таким образом, кнопки в любом случае больше не будут интерактивными / видимыми, поэтому достаточно просто отключить quitImg и полностью избавиться от двух строк

exit.enabled = false;
resume.enabled = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...