Дезактивировать это скорее пустая трата времени, или даже сделать хуже по какой-то неясной причине?
Обычно существует 3 способа показать и скрыть пользовательский интерфейс. Я перечислил их от худшего к лучшему.
. Исключить (Показать), уничтожить (скрыть).
public GameObject uiPanelPrefab;
void Start()
{
//Show
Instantiate(uiPanelPrefab);
//Hide
Destroy(uiPanelPrefab);
}
Это создает и уничтожает объекты каждый раз. (Не рекомендуется).
.Activate (Показать) или Деактивировать (скрыть) GameObject этого интерфейса.
public GameObject uiPanelPrefab;
void Start()
{
//Show
uiPanelPrefab.SetActive(true);
//Hide
uiPanelPrefab.SetActive(false);
}
Это создает для мусора каждый раз, когда он установлен в активное состояние, а также вызвать быстрое замораживание. Вы заметите это при создании приложений VR. Хорошо на настольных компьютерах. Не рекомендуется или рекомендуется на мобильных устройствах.
.enable (Показать) или Отключить (скрыть) Component
этого интерфейса.
public GameObject uiPanelPrefab;
void Start()
{
//Show
uiPanelPrefab.GetComponent<Image>().enabled = true;
//Hide
uiPanelPrefab.GetComponent<Image>().enabled = false;
}
Это просто включает и отключает компоненты. Этот метод требует пользовательской функции для каждого элемента управления UI, такого как Button
, Text
, InputField
, поскольку каждый элемент управления имеет различные компоненты, прикрепленные к ним. Это рекомендуемый метод, особенно на мобильных устройствах.
После долгих экспериментов с этим, я пришел к выводу, что # 3 является лучшим и должно быть used.The недостатком является то, что вы должны сделать функцию, которая будет отключить все компоненты каждого контроля пользовательского интерфейса.
Например, Button
Control имеет более 1 компонента. Простое отключение компонента Button
этого не сделает. Вы должны написать простую функцию, которая отключит компоненты Button
, Image
и Text
. Что-то, как показано ниже:
void showButton(GameObject button, bool show, bool includeInactive = false)
{
Button bt = button.GetComponentInChildren<Button>(includeInactive);
bt.enabled = show;
Text txt = button.GetComponentInChildren<Text>(includeInactive);
txt.enabled = show;
Image img = button.GetComponentInChildren<Image>(includeInactive);
img.enabled = show;
}
Использование:
//Show
showButton(uiPanelPrefab, true);
//Hide
showButton(uiPanelPrefab, false);
Destroy и Instantiate полезны для освобождения памяти, но только если вы не используете ее часто. Если вы считаете, что определенная кнопка будет редко отображаться, вы можете отказаться от ее уничтожения. – Kokolo
Tavados - Это совершенно неуместно. Забудь об этом. Если кнопки не используются, просто скройте их. Нет ничего более. – Fattie
Речь идет не о том, чтобы скрывать или показывать кнопки. Мой пост был сильно отредактирован и в основном изменил тему, поэтому я отредактировал его и объяснил немного больше, что я имею в виду. – Tavados