Глобальное обновление 24.04.05

Глобальное обновление 24.04.05

Влад aka keyneed

Выкладываю оригинальное сообщение, которое я писал до того как перевести и выложить на свой сайт:

Привет выжившие, сегодня я выпускаю довольно глобальное обновление, которое заставило меня пойти на множество изменений во внутренней логики игры, если вкратце, то игра обзавелась новой концепцией игрового интерфейса, редактором уровня и новым неткодом!


Теперь нужно перейди к большим деталям и рассказать о каждом изменении по отдельности, начнем по порядку:


ЮЗЕР ИНТЕРФЕЙС


До текущего дня игра имела, скажем, довольно неоднозначное решение оформления главного экрана да и игры в целом, сейчас же я во многом определился с тем, что я хочу и буду двигаться примерно в том направлении, который вы могли увидеть на главном экране новой версии. И да, я решил сделать магазин отдельно от вкладки игры во многом по причине того, что раньше оно было уж больно сильно вплетено в саму игру, а теперь это становится скорее дополнением, нежели что-то единое. Ну а с другой стороны мне хотелось сделать что то вроде оверлея Steam внутри этой вкладки. Ну и в третьих, мне кажется что такой вариант интерфейса банально красивее и более самобытный.

РЕДАКТОР УРОВНЕЙ


Наконец-то я его добавил, однако история его создание гораздо интереснее,ч ем может показаться на первый взгляд, ведь изначально я хотел просто изменить имеющийся уровень Скол добавив туда обновленную Nowa Huta, но я столкнулся с рядом ограничений, которые не давали мне сделать. Я думаю мои потуги можно разделить даже на целые главы.


1. Добавление нового уровеня напрямую. Это логично первое что я подумал. Чтобы не загрязнять основную карту, я создал копию, где начал делать новую локацию, когда я закончил работу, я думал просто перенести это на основную сцену, но тогда и началось самое неприятное, ведь итоговый размер карты был настолько большим, что при создании билда размер самой игры перевышал 400 мб, что просто недопустимо (К слову, размер новой версии всего 80 мб) так что я решил пойти на следующий шаг.

2. Разделение карты на суб уровни. В отличии от моего первого подхода напрямую создания карты, я решил сделать одну карты, которая была бы разбита на несколько более мелких, то есть, например, локация Франковска был бы одном уровне, локаия Nowa Huta в другой, а окружение в третьей. В отличии от моей первой попытки (из предыдущих версий), когда игрок переходил с одной локации на другую меняя сервер, в этом же случае все локации подгружались бы сразу как дополнительные. Однако у такого подхода было так же ряд недостатков, вес карты может и снижался, но итоговый размер игры не менялся, да и начали происходить множество проблем с производительностью и, что хуже с серверами, так что и от этой идеи я отказался.

3. Создание цифровой копии целого уровня. Я думал, что еще одним вариантом может быть возможность сделать цифровую копию целого уровня, так чтобы, он сохранялся отдельным файлом (типа .dat), и при загрузке уровня игрок загружал бы его из этого файла, но после создания этой системы я понял, насколько она неудобная для меня и решил отказаться.

4. Непосредственно редактор уровней. Наконец-то спустя время я понял, что лучше уже не играться с довольно проигрышными вариантами и просто буду допгружать уровень так же как и с прошлого пункта, но уже через полноценный редактор. Это было крайнее решение, ибо это означало, что мне нужно файтически переписывать гигнатскую часть игры с нуля и так оно и оказалось, мне пришлось перелопатить пол игры, чтобы адаптировать его под новой вариант работы уровней. Для начала я думал добавить для игроков (для себя тоже) возможность через редактор управлять только статическими объектами, но затем уже и добавил поддержку для редактора террейна и даже внедрил полноценную иерархию в проект, с помощью которого можно делать буквально все. Это фактически полноценный игровой движок внутри игры (правда очень сильно урезанный). Делал я его безумно долго и столкнулся с рядом проблем, которые заставили меня идти на довольно радикальные изменения. Так например, встроенный ассет для исскуственного интеллекта в юнити был сильно ограничен и он не давал мне возможности сохранять Navmseh сгенерированный игрой, так что мне пришлось покупать от стороннего разработчика ассет за 100$ просто для того чтобы эта функция появилось, а вместе с этим мне пришлось переписать и всю логику искусственного интеллекта в игре, что очень сильно ударило по времени и моих сил. Так же там было довольно много других нюансов, но расписывать их я буду слишком долго, о них я уверен можно написать целую книгу. Вскором времени начну снимать туториалы, как работать с новым рудактором так как функционала там безумно много и чтобы разобраться в нем нужно время.


НОВЫЙ НЕТКОД


Ох... это был настоящий кошмар. Переход на него был необычайно болезненным, ведь это значило что мне придется переписать всю игру... и я это и сделал. Вообще для начала нужно объяснить, что мне не нравилось в фотоне, если вкратце, то это все, за что вы ненавидили мультиплеер в Erythros, реально, вечно забитые сервера, непонятные регионы и все такое. Изнчально я думал, что это можно исправить купив свой сервер и поставить туда клиент игры и сервер от самого фотона и я даже написал был поддержку для этого, чтобы люди могли это так же сделать, но... сервер от фотона просто не в какую не хотел работать, на форумах не было ни одной информации а последний раз эту штуку обсуждали в далеком 2015 году, и с тех пор там ничего не менялось. После этих мучений я понял, что оставаться на фотоне вообще не вариант и я начал активно изучать другоие решения. Но в конце концов остановился на 3 вариантах либо использовать Mirror, либо FishNet, либо самому склепать сервер/клиентскую логику на Telepathy. Сначала я пробовал через первый вариант так как это довольно популярное решение, но логика уж слишком сильно расходилась с тем что у меня было ведь там функционал RPC был сильно ограничен, из-за чего я решил, что на него переписать игру фактически невозможно. Так что я решил начать со вторым и какое же мое было удивление, как же просто он работал и именно на нем я и остановился. Да у него тоже было тысячу ограничений, которые заставили меня полностью переписать игру, но тем не менее это было не так болезненно, как это могло бы быть в первом случае. Для моего кода боль перехода с фотона на зеркало это сравнимо с ударом поезда на скорости 200 км в час, в тот час как перейти со второго это было сравнимо с ударом фуры, которая ехала со скоростью 120 км в час, то есть как бы исход один и тот же только при первом варианте получится фарш, то при втором возможно даже тело останется.(знаю, не самое приятное сравнения, но для моего психики это было вполне понятное объяснение насколько сильно я трудился)


Но у того, что сделал есть и свои плюсы, ведь теперь игра работает одним потоком, а не как раньше, кто первый успеет попасть в оработку тот и выполнится. Раньше логика игры работала как дикие джунгли, где все вопросы решались силой. Сейчас же игра стала работать намного предскуемо и она строго идет по одному сценарию на всех устройствах и никак иначе.


Плюсами нового неткода стала полноценная поддержка удаленных серверов, LAN серверов и теперь свой собственный сервер можно сделать через ZeroTier как в старые добрые времена. Больше никаких CCU и игра может поддерживать столько людей на сервере, сколько выдержит (более 100 человек). К тому же я вернул SuperHost, который раньше позволял симулировать логику работы сервера без клиента. Думаю мне стоит тоже сделать пару туториалов по созданию своих серверов.


Так же для обладателей премиума браузер серверов обретает новую жизнь, ведь теперь там будут доступны все официальные сервера игры, а в будующем возможно даже и не только официальные. Для того, чтобы добавить в тот список новый сервер, нужно для начала сконтактирвоаться со мной и я буду ещедневно проверять сервер на работоспособность, чтобы сохранить качество этой вкладки, ну и в будущем возможно будет автоматизация этого процесса.


Временно функция VoIP не работает, так как она нуждается в переработке.


ВСЯКИЕ ДРУГИЕ ФИЧИ


Помимо всего перечисленного выше, хочется так же упомянуть несколько других важных изменений. Так например я серьезно поработал над шейдерами, для этого мне пришлось снова покупать отделаьный ассет за 100+$ который дает возможность легче создавать новые шейдеры. Ну и после этого я уже написал 2 новых шейдера. Фонарь и фары машины вынлядили раньше как прожекторы, которые освещали всю карту, теперь же так не происходит и дальность света ограничена. Да, тут важно остановится, многие люди не поняли в чем смысл было делать плосский свет. У этого есть одна важнейшая прична, оптимизация. Видите ли обработка света это катастрофически ресурсоемкий процесс, но в случае этой игры, которая сильно зависит от GPU Instancing (благодаря которой локация Франковск так гладко шел на средних телефонах) технологии - это невероятно критично, ведь если какой либо источник света попадет на объект с GPU Instancing, то это фактически отключает эту функцию для него, а это значит падение ФПС в 10 раз! Так что я решил сделать весь свет в игре через плосскую текстуру, которая вообще не излучает свет, а только его симулирует, от чего телефоны и их железо не воспринимают это не за источник света, а за еще один объект игрового мира, а значит я могу их расставить хоть тысячу в ряд, а фпс не изменится.

До
После

Так же я убрал странное белое свечение у статического освещения.

Report Page