Страница 1 из 8

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

СообщениеДобавлено: 28 дек 2013, 00:32
Neodrop
Предлагаю вашему вниманию, небольшую демку возможностей моего фреймворка, построенного полностью на обычном 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

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

СообщениеДобавлено: 28 дек 2013, 01:01
BornFoRdeatH
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++)

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

СообщениеДобавлено: 28 дек 2013, 01:20
DbIMok
BornFoRdeatH писал(а):на отрисовку идут все елементы?

отрисовываются те элементы, которые попали в камеру, т.е. 83 шт. значения для 1000 чтобы оценить накладные расходы на обработку таких элементов.

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

СообщениеДобавлено: 28 дек 2013, 01:37
Neodrop
Всё не так просто, как казалось бы. Но, да, приблизительно так, как написал Дымок.
Кстати, если кто не понял, этот скролл тягается мышью. Колёсико мыши крутить не обязательно.

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

СообщениеДобавлено: 28 дек 2013, 01:46
Syberex
Выглядит заманчиво! \m/
А бета версия раздаваться/продаваться/за предоплату не будет? :-?

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

СообщениеДобавлено: 28 дек 2013, 01:49
Neodrop
Можно договориться, почему бы и нет. Только это уже давно не бета. Система проверена и обкатана на нескольких проектах. Просто превратить её в продукт для стора, всё никак руки не доходят.
[curved_hands]

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

СообщениеДобавлено: 28 дек 2013, 01:56
Syberex
А как насчет дистрибутивного пакета, как у NGUI-я, чтобы закинуть в маркет примочки можно было? ;)

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

СообщениеДобавлено: 28 дек 2013, 01:57
Neodrop
Весь код открытый. Я не буду ничего упаковывать в библиотеки.

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

СообщениеДобавлено: 28 дек 2013, 07:00
Syberex
NGUI SHIT

А этот объект за что отвечает? :-?

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

СообщениеДобавлено: 28 дек 2013, 11:10
Neodrop
Нажми зелёную кнопочку в правом-верхнем углу экрана ;)

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

СообщениеДобавлено: 28 дек 2013, 16:35
Neodrop
Свайп (тягание скролла мышью) поправлен. Теперь можно свайпить (тягать) и за кнопки.

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

СообщениеДобавлено: 28 дек 2013, 16:45
BornFoRdeatH
Ну раз так, то у меня парочка вопросов.
1. Можете привести пример кода для создания скрола рантайм?
2. Будет ли иксгуй отдельным от антареса?
3. Если будет отдельным то какова цена? Я бы прикупил если бы ответ на первый вопрос меня устроил :)

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

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


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

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

Цена.. Пока не знаю. От 50$ до 99$ ? Вероятно где-то в этом пределе. Скорее, ближе к 75.
Если есть соображения, сколько такой пакет мог бы стоить, высказывайтесь. Хотя, я слишком мало рассказал о его возможностях. Основная прелесть в скорости и удобстве сборки внутри Unity Editor. Но, без скринкаста это сложно объяснить. Хотя сам процесс прост как игра в лего.

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

СообщениеДобавлено: 30 дек 2013, 10:47
Syberex
Лучше бы пример кода обработки событий ;)

А как с локализацией и растровыми шрифтами?

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

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

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

Растровые шрифты... Не вижу в них абсолютно никакой необходимости. В смысле, пытаться реализовать все механизмы GUI с использованием кастомного механизма вывода текста, это самоубийство. А сделать надписи на базе какого-то кастомного шрифта, никто вам не помешает. Просто вывести картинки с надписями через DrawTexture или любым другим методом. Это не сложно и выглядеть будет достойно.
Примотать что-нибудь типа вот этого : viewtopic.php?f=84&t=19329 в принципе не очень сложно, но, пока что это можно записать в дальние планы. На развитие. Для базового функционала, по моему мнению, это не сильно важно. Лучше уж потратить время на завершение полноценного функционала 3D GUI, который реализован в базовом варианте, но требует доработки и завершения.