Разве NGUI так может?

Инструменты для разработки

Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 00:32

Предлагаю вашему вниманию, небольшую демку возможностей моего фреймворка, построенного полностью на обычном Unity GUI, но, смею надеяться, лишённого многих её недостатков и неудобств.
Сборка и настройка интерфейсов осуществляется в редакторе Unity в режиме WISIWIG - все изменения и дополнения мгновенно отображаются прямо в окне GameView без включенного Play режима.
Система иерархична, но не использует информацию о положении трансформов, поэтому, независимо от глубины и разветвлённости иерархии, не подвержена тормозам, возникающим при работе с глубоко эшелонированными трансформами.
Всё компонентно. Каждый элемент интерфейса - отдельный монобех. Но, даже самый изощрённый UI, будет использовать всего лишь один OnGUI для прорисовки интерфейса любой мыслимой сложности.
В данной демке, в зависимости от количества объектов в Scroll View, на моём компе загрузка CPU :
100 элементов в скролле : 1 миллисекунда.
1000 элементов в скролле : 4 - 4.5 миллисекунды.
GPU в обоих случаях : 0.18 миллисекунд (82 DrawCalls)

DrawCalls можно было бы и снизить, просто демка не шибко ориентирована на их понижение. Но, поверьте мне на слово, их количество далеко не так страшно, как все привыкли думать. В Unity 4.x это уже совсем не такая проблема, как было раньше. 0.18 миллисекунды на рендеринг, мне кажется это ни о чём (карта у меня далеко не самая навороченная. Ей уже года три.)

Фреймворк ориентирован в первую очередь на дизайнеров. Опыт показал, что на освоение системы, вполне достаточно 15-20 минут для человека, даже отдалённо не представляющего себе, что такое Unity GUI. Дизайнер собирает и настраивает шаблон интерфейса, передаёт его программисту, который реализует события кликов и пр. что обычно делается в GUI и полностью избавлен при этом от обычной пляски с бубном над прорисовкой и настройкой кнопочек, скроллов, лейблов и прочей гуёвой свистопляски.

На последок, небольшой анекдот. Пока я собирал эту демку (на это ушло что-то около часа) на крайнюю нижнюю кнопку я поставил циферку 100500 и с дуру нажал на неё (если вы ещё не посмотрели демку, нижние кнопки создают элементы интерфейса, отображающиеся в скролле). Юнька скрипела несколько минут, а я грыз ногти, пытаясь вспомнить, сохранил ли я сцену перед Play или нет. И... Я сам не поверил своим глазам : спустя минут пять, Юнька разрешилась от бремени, выкатив мне 100500 элементов GUI в одном скроллере! FPS правда был не очень (4-5 кадров в секунду), но IT'S A LIVE !

Надеюсь, у меня хватит терпения, соорудить для проекта небольшую справку (в действительности, API мизерное. Практически из десятка пунктов и правил.) и несколько няшных демок (туторов), чтобы в январе выпустить проект в свет.

З.Ы. На всякий случай уточню : свиток тягается мышью. Как это принято на мобилках. Не только реагирует на прокрутку колёсика.
Слева вверху- кнопка полноэкранного режима. Лучше запустить и его. За одно, можно посмотреть, как замечательно перестраивается пикселькорректный фон под полноэкранное разрешение.
Справа вверху - пасхалка ;)


Для проекта (проектов), который я сочту интересным и серьёзным, могу предоставить XGUI бесплатно. Но, после публикации на AssetStore его нужно будет купить для удобства обновлений. Дорого стоить не будет.
Бесплатный саппорт в течении января 2014 гарантирован.

Android APK. Пожалуйста, отпишитесь в теме, как у кого работает и на каком устройстве.(9.25 mb)

(Web Demo обновлено и перезалито 04.01.2014)
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://www.unity3d.ru/composition/XGUI/ScrollingDemo/SHOWREAL/SHOWREAL.unity3d&w=1024&h=800&t=false&preview=1' height='"+(800+30)+"' width='1024' frameborder='0' scrolling='no'></iframe>"); </script>


ScrollView.jpg


ОБНОВЛЕНИЯ


Тулбар с HTML тегами для ReachText

HTMLToolbar.jpg
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение BornFoRdeatH 28 дек 2013, 01:01

Neodrop писал(а):100 элементов в скролле : 1 миллисекунда.
1000 элементов в скролле : 4 - 4.5 миллисекунды.

Тоесть на отрисовку идут все елементы? Но зачем?

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=https://dl.dropboxusercontent.com/u/62804398/TimeKiller/TimeKiller.unity3d&w=480&h=800&t=false&preview=1' height='"+(800+30)+"' width='480' frameborder='0' scrolling='no'></iframe>"); </script>


елементарно отрисовываем только видимые елементы, в данном случае их аж целых 12 из 10000, что на фпс сказаться ну никак не может...
Простой расчет количества отображаемых елементов и
Синтаксис:
Используется csharp
for (int i = drawStart; i < drawEnd; i++)
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Разве NGUI так может?

Сообщение DbIMok 28 дек 2013, 01:20

BornFoRdeatH писал(а):на отрисовку идут все елементы?

отрисовываются те элементы, которые попали в камеру, т.е. 83 шт. значения для 1000 чтобы оценить накладные расходы на обработку таких элементов.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 01:37

Всё не так просто, как казалось бы. Но, да, приблизительно так, как написал Дымок.
Кстати, если кто не понял, этот скролл тягается мышью. Колёсико мыши крутить не обязательно.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение Syberex 28 дек 2013, 01:46

Выглядит заманчиво! \m/
А бета версия раздаваться/продаваться/за предоплату не будет? :-?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 01:49

Можно договориться, почему бы и нет. Только это уже давно не бета. Система проверена и обкатана на нескольких проектах. Просто превратить её в продукт для стора, всё никак руки не доходят.
[curved_hands]
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение Syberex 28 дек 2013, 01:56

А как насчет дистрибутивного пакета, как у NGUI-я, чтобы закинуть в маркет примочки можно было? ;)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 01:57

Весь код открытый. Я не буду ничего упаковывать в библиотеки.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение Syberex 28 дек 2013, 07:00

NGUI SHIT

А этот объект за что отвечает? :-?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 11:10

Нажми зелёную кнопочку в правом-верхнем углу экрана ;)
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 16:35

Свайп (тягание скролла мышью) поправлен. Теперь можно свайпить (тягать) и за кнопки.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение BornFoRdeatH 28 дек 2013, 16:45

Ну раз так, то у меня парочка вопросов.
1. Можете привести пример кода для создания скрола рантайм?
2. Будет ли иксгуй отдельным от антареса?
3. Если будет отдельным то какова цена? Я бы прикупил если бы ответ на первый вопрос меня устроил :)
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Разве NGUI так может?

Сообщение Neodrop 28 дек 2013, 17:01

Пример кода для создания или для заполнения?
Для создания - Instantiate - просто потому, что абсолютно любой элемент интерфейса, одиночный, или сложная группа, могут быть созданы и сохранены как префаб. Остаётся инстансировать и подчинить паренту.
Синтаксис:
Используется csharp
var scroll = Instantiate(scrollPrefab) as GameObject;
scroll.transform.parent = someXGUIContainer.transform;
someXGUIContainer.RescanHierarchy(false); // нужно для регистрации чилдов для прорисовки.


Заполнение скролла объектами производится точно так же. Создаём, добавляем в чилды. Вызываем Rescan на паренте. Всё. Сортировка доступна и возможна. Зависит от кодера.

XGUI не имеет никакого отношения к группе продуктов под общей маркой Antares.

Цена.. Пока не знаю. От 50$ до 99$ ? Вероятно где-то в этом пределе. Скорее, ближе к 75.
Если есть соображения, сколько такой пакет мог бы стоить, высказывайтесь. Хотя, я слишком мало рассказал о его возможностях. Основная прелесть в скорости и удобстве сборки внутри Unity Editor. Но, без скринкаста это сложно объяснить. Хотя сам процесс прост как игра в лего.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Разве NGUI так может?

Сообщение Syberex 30 дек 2013, 10:47

Лучше бы пример кода обработки событий ;)

А как с локализацией и растровыми шрифтами?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Разве NGUI так может?

Сообщение Neodrop 30 дек 2013, 13:40

События обрабатываются через подписку на делегаты. К примеру XGUIButton имеет делегат onButtonPressed. Планирую так же добавить в базовый класс делегаты почти на все события GUI, но, если честно, за 4 месяца разработки и использования, ничего кроме onButtonPressed мне (и всем, кто уже использует систему) ни разу не понадобилось.
Так же, есть дополнительный компонент кнопки (перегрузка), посылающий UnityMessage.

Локализация, это как бы частный программный вопрос, не имеющий непосредственного отношения к GUI системе, как таковой. У меня есть механизм подготовки и использования локализаций, но это отдельная технология.

Растровые шрифты... Не вижу в них абсолютно никакой необходимости. В смысле, пытаться реализовать все механизмы GUI с использованием кастомного механизма вывода текста, это самоубийство. А сделать надписи на базе какого-то кастомного шрифта, никто вам не помешает. Просто вывести картинки с надписями через DrawTexture или любым другим методом. Это не сложно и выглядеть будет достойно.
Примотать что-нибудь типа вот этого : viewtopic.php?f=84&t=19329 в принципе не очень сложно, но, пока что это можно записать в дальние планы. На развитие. Для базового функционала, по моему мнению, это не сильно важно. Лучше уж потратить время на завершение полноценного функционала 3D GUI, который реализован в базовом варианте, но требует доработки и завершения.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

След.

Вернуться в Инструментарий

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2