Просмотр полной версии : Браузер на Unity 3D
Несмотря на то, что создание браузера миров на движке Unity 3D застопорилось, всё же решил открыть тему, посвящённую разработке браузера на Юнити. На данный момент исходного кода браузера, написанного Маинспиритом у меня нет, да и врядли когда-то будет. Поэтому начинать придётся с полного нуля. Я лишь попытаюсь привлечь данной темой заинтересованных пользователей и описать так сказать начальные технические требования к браузеру, сам что-либо разрабатывать пока не намерен.
Итак, что должен уметь самый первый, так сказать, экспериментальный браузер миров на Юнити:
1. Иметь чат (глобал, без регистрации)
2. Возможность путешествия по мирам или хотя бы по одному выбранному изначально миру и просмотр построек и ландшафта (аватары на первом этапе необязательны)
3. Способ загрузки объектов пока не важен (то есть способ выбирается пока лёгкостью его реализации - вероятно пока придётся выкачивать всю базу мира)
4. Взаимодействие с сервером вселенной через бота
Так подумал, а может проще сначала сделать копии каких либо миров для просмотра на движке Юнити, причём в однопользовательском режиме?
Поясню. Допустим есть в наличии полная база объектов и текстур для какого-то мира, а также имеются дампы террайна, настроек мира и объектов. Всё, этого достаточно для создания копии этого мира, просматривать который можно только в браузере на Unity и только в локальном режиме вообще без подключения к сети.
Чтобы это осуществить нужно написать скрипт на Си шарпе или ДжаваСкрипте, который сконвертирует базу объектов из рвх во внутренний формат Юнити или в один из распространённых форматов, например .obj Также скрипт будет расшифровывать дампы, заставляя таким образом движок рисовать на экране мир таким, каким мы его видим в АВ (с более лучшей графикой конечно).
Благодаря такому подходу можно сначала отрабатывать графическую часть браузера, потихоньку прикручивая всё новый фишки, включая режим строительства, а уже потом думать о создании многопользовательского режима. В качестве сетевого движка может подойти поначалу и встроенная в Юнити сеть, а потом можно либо замутить что-то своё либо пользоваться готовыми решениями, например сетью Фотон. правда Фотон платный, бесплатно можно вроде только до 20 подключений использовать.
Таким образом получится, что наши миры уже даже АВ нельзя будет назвать, так как от русской вселяки AW останутся только сами миры, как бы напоминая, что когда-то они были авэшными. Технология же будет полностью другая.
Ещё раз подумал, и появилась идея вообще исключить процесс конвертации из rwx какими то самодельными средствами типа скриптов на шарпе. Ведь можно предварительно сконвертить всю базу в пакетном режиме с помощью АккуТранса в тот же obj или другой формат, понимаемый Юнити. И не заморачиваться лишними этапами разработки.
Итак, что требуется сделать на первом этапе разработки:
1. Создать небольшой мир, террайн пока не важен, пусть будет плоский и с одной текстурой.
2. Создать независимую базу для мира. Объектов в базе пускай будет не больше 50-70. Среди объектов должны быть разные элементы зданий (стены, окна и т.д.), уличные объекты (например фонари, скамейки, дороги, растения), ну и ещё так по мелочи всякого разного, например транспорт. Также закинуть в базу несколько бесшовных текстур.
3. Построить что-то в мире, часто построек пусть состоит только из объектов без команд. Это нужно, чтобы сначала сделать простенький скрипт в Юнити для просмотра объектов как они есть. Остальные постройки делать из объектов, в большинство из которых будут вписаны различные команды. Это понадобится для более сложного скрипта, понимающего эти команды и отображающего изменённые объекты в Unity.
4. Сконвертировать объекты базы с помощью Аккутранса в один из понимаемых Юнити форматов.
5. Создать скрипты на C#, преобразующие авэшный дамп объектов в понимаемые движком Юнити координаты того или иного объекта. Конечной целью первого этапа должно стать отображение копии мира со всеми командами объектов в браузере на Юнити.
Пришла новая мысль - а нафига вообще делать какие то костыли для переброски построек из авэшных миров в миры на Юнити. Не, ну в качестве дополнительных любительских плагинов - пожалуйста. А так, зачем переносить на новый движок абсолютно всё, включая строительный хлам, оставленный многими пользователями на просторах наших миров.
В результате идея такая:
1. Во всех мирах найти самые лучшие постройки. Естественно в список шедевров вносятся такие постройки и ландшафты голосованием среди оставшихся в мирах юзеров. Список должен состоять из названия шедевра, его координат и ников пользователей (ля), которые строили данный экземпляр. Ну можно ещё краткое описание и даже скрины. Список можно создать в двух вариантах - по мирам и по тематике построек.
2. Далее идёт процесс захвата построек с помощью программы 3D ripper.
3. Каждая постройка оптимизируется - удаляются лишние поверхности, полигоны, даже иногда лишние объекты. Текстуры построек переименовываются и если постройки в одном и том же мире - то одинаковые текстуры удаляются. У меня, к примеру, есть опыт такой оптимизации с помощью программы Visual Author.
4. В промежуточном варианте все постройки конвертируются в рвх и выкладываются в каком-либо мире AW, например в Астериске (не ради рекламы мира, а просто потому, что это самый большой из всех миров).
5. Создать на Unity нечто вроде миров-музеев, куда поместить исходные (не конвертированные в rwx) варианты построек. Миры-музеи также можно скомпилировать и раздать желающим. Копии проектов непременно хранить как зеницу ока.
6. В будущем, когда (и если) появятся онлайн миры на Юнити, включить эти локации-музеи туда.
А нафига вообще делать браузер и темболие на Unity? Вроде уже делали и не получилось. Вы сами обетом писали выше.
Насчет форматов - проще написать загрузчик rwx чем бесполезно копировать и переводить.
У Маинспирита очень даже получилось, только вот не дошёл до реализации режима строительства и забросил. Ну и он говорил, что происходила большая утечка памяти, никак не мог справиться с проблемой. Почему забросил - это уже другой вопрос. Думаю по причине тотального отсутствия заинтересованности "авэшников" в этой разработке.
Интересно что унего получилось? Чат да загрузка rwx. Извените но это день работы если знаешь SDK да C#. Строительство это основная работа. А насчет утечки то тут либо прелести Юнити во всей красе, либо лучше промалчу. Юнити сам посебе жрет много памяти.
Вот что. Человек не знал до этого ни СДК миров, ни устройство формата рвх, ни си шарпа ни даже юнити. Поэтому то, что он сделал за такой достаточно короткий срок заслуживает вдвойне уважения. То что забросил - ну и ладно, наши миры настолько устарели, что надо прекратить попытки дать им новую жизнь, пусть и в теле другого движка.
Тут как-то приходил один человек с ником Metron, грозился представить широкой публике сначала чат на андроиде для миров, потом и новый 3д-браузер. Прошло два года - воз и ныне там. Кто такой Метрон я знаю, точнее его настоящий ник. Насколько я осведомлён - он неплохой программист, и вполне мог создать то что обещал, так как это его область деятельности так сказать. Маинспирит тоже программист, но взялся за то, с чем раньше не был знаком, и хоть что-то сделал. Не произнося громких заявлений. Просто взялся и сделал.
К чему я привёл это сравнение - если есть знания и опыт, если есть желание что-то сделать, делаем, зачем эта демагогия?
Я не читаю вам натаций и не пытаюсь переубедить к чемуто стремится. Я просто пытаюсь реально расуждать. Гонятся за мечтой ведь можно целую жизинь. А можно просто реально взглянуть на поставленную задачу и попытатся правильно организовать работу над проектом. Правильная постановка задачи и грамотное растоновка приорететов - это залог успешного проекта. Не зря говорят как корабль назавешь так он и паплывет. Я просто хочу сказать что вы не правильно подошли к работе.
Ну, возможно и так, спорить не буду.