2017-02-19 16 views
0

В случае мобильного приложения Unity было бы хорошо (вообще) для производительности, деактивировать навигацию через объекты на холсте, такие как TextFields и Buttons?Unity - Навигация для повышения производительности на мобильном телефоне

При выборе, например, кнопки или TextField в сцене, инспектор показывает опцию «Навигация», которая может быть установлена ​​на разные вещи и также может быть визуализирована. Эта функция обычно используется для ввода полей ввода, например, вы ожидаете ее на веб-сайте. В моей мобильной игре мне не нужна эта «табуляция». Будет ли какое-то увеличение производительности, если я отключу его повсюду?

+0

Destroy и Instantiate полезны для освобождения памяти, но только если вы не используете ее часто. Если вы считаете, что определенная кнопка будет редко отображаться, вы можете отказаться от ее уничтожения. – Kokolo

+0

Tavados - Это совершенно неуместно. Забудь об этом. Если кнопки не используются, просто скройте их. Нет ничего более. – Fattie

+0

Речь идет не о том, чтобы скрывать или показывать кнопки. Мой пост был сильно отредактирован и в основном изменил тему, поэтому я отредактировал его и объяснил немного больше, что я имею в виду. – Tavados

ответ

0

Я могу подтвердить, что деактивация навигации элементов пользовательского интерфейса не имеет никакого влияния производительности.За кулисами есть только обработчик, который запускается, когда вы нажимаете «вкладку» на ПК или аналогично на мобильном устройстве.

0

Дезактивировать это скорее пустая трата времени, или даже сделать хуже по какой-то неясной причине?

Обычно существует 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); 
+0

Вы проверили мой ответ? – Programmer

+0

Это совершенно вне темы. Вы отредактировали заголовок и содержание моего сообщения, а затем написали ответ, который не соответствует моему первоначальному вопросу. – Tavados

+0

Я вернул его обратно к исходному вопросу. Ваш вопрос о том, лучше ли отключать компоненты пользовательского интерфейса, такие как текстовые поля и кнопки ... Это ваш вопрос. Я предоставил способы сделать это, а потом сказал вам, что лучше включить/отключить компонент, а не деактивировать их. – Programmer