www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   2D/GUI (http://forum.boolean.name/forumdisplay.php?f=167)
-   -   Несколько меню в игре (http://forum.boolean.name/showthread.php?t=20172)

ABTOMAT 29.01.2016 18:25

Несколько меню в игре
 
В-общем, снова желаю посоветоваться на предмет "Не фигню ли я делаю?"
Встала такая задача:

Есть GUI (который юнитовский современный, не Legacy) в игре: счётчик здоровья, очков, патронов, кнопка паузы и т.д.

По нажатию на кнопку паузы надо сделать показ дополнительных кнопок ("выйти в главное меню", "настройки" и т.д.)

Собственно, я вздумал сделать отдельный Canvas под них и показывать только в определённый момент. Кстати, в "настройках" тоже будут свои пункты, под них тоже отдельный Canvas.

Собственно, не много ли канвасов я собираюсь наплодить? Стоит ли делать как-то иначе, или выше описан нормальный подход?

Антихрист 29.01.2016 18:32

Ответ: Несколько меню в игре
 
Цитата:

Сообщение от ABTOMAT (Сообщение 303709)
В-общем, снова желаю посоветоваться на предмет "Не фигню ли я делаю?"
Встала такая задача:

Есть GUI (который юнитовский современный, не Legacy) в игре: счётчик здоровья, очков, патронов, кнопка паузы и т.д.

По нажатию на кнопку паузы надо сделать показ дополнительных кнопок ("выйти в главное меню", "настройки" и т.д.)

Собственно, я вздумал сделать отдельный Canvas под них и показывать только в определённый момент. Кстати, в "настройках" тоже будут свои пункты, под них тоже отдельный Canvas.

Собственно, не много ли канвасов я собираюсь наплодить? Стоит ли делать как-то иначе, или выше описан нормальный подход?

Из справки: Одного холста для всех UI-элементов вполне достаточно, но и несколько холстов в сцене допустимо. Также, возможно использование нескольких холстов, когда один выставляется дочерним элементом другого, для оптимизации. Вложенный холст использует тот же режим рендеринга (Render Mode), что и родитель.

От себя: У меня большое кол-во канвасов отражалось на производительности(чекал в профаилере), поэтому использовал Panel,которые скрывал/показывал простым setactive().

ABTOMAT 29.01.2016 18:51

Ответ: Несколько меню в игре
 
Цитата:

Одного холста для всех UI-элементов вполне достаточно, но и несколько холстов в сцене допустимо.
Ну, тут вопрос в удобстве показывания/скрытия.

Цитата:

У меня большое кол-во канвасов отражалось на производительности
А вот это уже ценное замечание! И сильно? Тогда, наверное, действительно нафиг.

Антихрист 29.01.2016 19:18

Ответ: Несколько меню в игре
 
Цитата:

Сообщение от ABTOMAT (Сообщение 303711)
Ну, тут вопрос в удобстве показывания/скрытия.



А вот это уже ценное замечание! И сильно? Тогда, наверное, действительно нафиг.

Солидно, правда помимо переделывания канвасов в панели я еще отключал Raycast Target у всех элементов которым он не требовался, поэтому наверняка сказать,что из этого помогло я не могу.

Это могут быть и пустые го, но я делаю панелями,сразу выставляю ей стретч на весь экран,при необходимости оставляю/скрываю бэкграундовский image, дальше чаилды расставляю уже относительно этой панели.
Единственный минус перед канвасами для меня: Нет аналога Canvas.enabled=false/true, только отрубать го. Если эти панели нужно будет найти через gameobject.Find() то любой не активный го он не найдет. Поэтому их нужно будет или задать руками в нужных скриптах, или находить в awake(),а потом уже отрубать.
UP: чуть не забыл, если го сделать не активным то у него отключаются все скрипты,рендеры и.т.д => Относительно UI - если на панельке висит Аниматор, то при отключении он перейдет в статус Not Initialized,при включении насколько я понимаю он инициируется по новой, хз насколько это затратно в плане ресурсов,но пока проблем не встречал.

Nex 30.01.2016 05:50

Ответ: Несколько меню в игре
 
Я делал (и многие на тытубе так же) путем создания пустых объектов в канвасе и расстановки в них элементов для каждого окна (меню, настройки, etc). Это несколько не удобно, но за то всего один канвас. А дальше просто включай/выключай нужные/не нужные окна.
Не удобно потому что сразу все включенные окна создают кашу в редакторе, но если принудительно рукой выключить, то будет не возможно через код найти их. Нужно будет опять же принудительно в редакторе указывать ссылки.

RegIon 30.01.2016 12:01

Ответ: Несколько меню в игре
 
Дофига всяких меню/пагелей/кнопок. Для всего 1 канвас. Ui с аниматором, но отключение к плохому не приводит.
Raycast Target отключать желательно везде, что используется тупо как фон и не кликабельно, но если через EventController будешь получать элемеет, который под мышкой - он его не найдет, так как не рейкастит.


Часовой пояс GMT +1, время: 22:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot