|
2D/GUI Вопросы на тему 2D графики и интерфейсов |
29.01.2016, 21:25
|
#1
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Несколько меню в игре
В-общем, снова желаю посоветоваться на предмет "Не фигню ли я делаю?"
Встала такая задача:
Есть GUI (который юнитовский современный, не Legacy) в игре: счётчик здоровья, очков, патронов, кнопка паузы и т.д.
По нажатию на кнопку паузы надо сделать показ дополнительных кнопок ("выйти в главное меню", "настройки" и т.д.)
Собственно, я вздумал сделать отдельный Canvas под них и показывать только в определённый момент. Кстати, в "настройках" тоже будут свои пункты, под них тоже отдельный Canvas.
Собственно, не много ли канвасов я собираюсь наплодить? Стоит ли делать как-то иначе, или выше описан нормальный подход?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
29.01.2016, 21:32
|
#2
|
Разработчик
Регистрация: 20.01.2007
Сообщений: 485
Написано 182 полезных сообщений (для 412 пользователей)
|
Ответ: Несколько меню в игре
Сообщение от ABTOMAT
В-общем, снова желаю посоветоваться на предмет "Не фигню ли я делаю?"
Встала такая задача:
Есть GUI (который юнитовский современный, не Legacy) в игре: счётчик здоровья, очков, патронов, кнопка паузы и т.д.
По нажатию на кнопку паузы надо сделать показ дополнительных кнопок ("выйти в главное меню", "настройки" и т.д.)
Собственно, я вздумал сделать отдельный Canvas под них и показывать только в определённый момент. Кстати, в "настройках" тоже будут свои пункты, под них тоже отдельный Canvas.
Собственно, не много ли канвасов я собираюсь наплодить? Стоит ли делать как-то иначе, или выше описан нормальный подход?
|
Из справки: Одного холста для всех UI-элементов вполне достаточно, но и несколько холстов в сцене допустимо. Также, возможно использование нескольких холстов, когда один выставляется дочерним элементом другого, для оптимизации. Вложенный холст использует тот же режим рендеринга (Render Mode), что и родитель.
От себя: У меня большое кол-во канвасов отражалось на производительности(чекал в профаилере), поэтому использовал Panel,которые скрывал/показывал простым setactive().
|
(Offline)
|
|
29.01.2016, 21:51
|
#3
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Несколько меню в игре
Одного холста для всех UI-элементов вполне достаточно, но и несколько холстов в сцене допустимо.
|
Ну, тут вопрос в удобстве показывания/скрытия.
У меня большое кол-во канвасов отражалось на производительности
|
А вот это уже ценное замечание! И сильно? Тогда, наверное, действительно нафиг.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
29.01.2016, 22:18
|
#4
|
Разработчик
Регистрация: 20.01.2007
Сообщений: 485
Написано 182 полезных сообщений (для 412 пользователей)
|
Ответ: Несколько меню в игре
Сообщение от ABTOMAT
Ну, тут вопрос в удобстве показывания/скрытия.
А вот это уже ценное замечание! И сильно? Тогда, наверное, действительно нафиг.
|
Солидно, правда помимо переделывания канвасов в панели я еще отключал Raycast Target у всех элементов которым он не требовался, поэтому наверняка сказать,что из этого помогло я не могу.
Это могут быть и пустые го, но я делаю панелями,сразу выставляю ей стретч на весь экран,при необходимости оставляю/скрываю бэкграундовский image, дальше чаилды расставляю уже относительно этой панели.
Единственный минус перед канвасами для меня: Нет аналога Canvas.enabled=false/true, только отрубать го. Если эти панели нужно будет найти через gameobject.Find() то любой не активный го он не найдет. Поэтому их нужно будет или задать руками в нужных скриптах, или находить в awake(),а потом уже отрубать.
UP: чуть не забыл, если го сделать не активным то у него отключаются все скрипты,рендеры и.т.д => Относительно UI - если на панельке висит Аниматор, то при отключении он перейдет в статус Not Initialized,при включении насколько я понимаю он инициируется по новой, хз насколько это затратно в плане ресурсов,но пока проблем не встречал.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.01.2016, 08:50
|
#5
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Несколько меню в игре
Я делал (и многие на тытубе так же) путем создания пустых объектов в канвасе и расстановки в них элементов для каждого окна (меню, настройки, etc). Это несколько не удобно, но за то всего один канвас. А дальше просто включай/выключай нужные/не нужные окна.
Не удобно потому что сразу все включенные окна создают кашу в редакторе, но если принудительно рукой выключить, то будет не возможно через код найти их. Нужно будет опять же принудительно в редакторе указывать ссылки.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
30.01.2016, 15:01
|
#6
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Несколько меню в игре
Дофига всяких меню/пагелей/кнопок. Для всего 1 канвас. Ui с аниматором, но отключение к плохому не приводит.
Raycast Target отключать желательно везде, что используется тупо как фон и не кликабельно, но если через EventController будешь получать элемеет, который под мышкой - он его не найдет, так как не рейкастит.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:16.
|