Как мы потратили 1 год и 3 месяца на разработку браузерной игры

в 7:22, , рубрики: game development, unity3d, браузерные игры, игры, разработка игр, социальные сети

В этой статье расскажу о том, как начинал разработку собственной игры. Вы узнаете, сколько ушло на это времени и стоило ли вообще за это браться.

На игру мы потратили 1 год и 3 месяца, ниже я подробно распишу, куда ушло это время.

Предыстория

Все началось с того, что мы с друзьями решили сделать совместный проект (конечно, с друзьями, типичная ситуация). Нас было 4 человека, все «айтишники», ни один из нас никогда не имел дело с разработкой игр, это был для нас темный лес, очень темный.

Диалог был примерно такой:
— Может, игру начнем делать?
— Давайте, почему бы не попробовать?
— А о чем игра то будет?

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

— Шутеров — куча, танки — есть, самолеты — есть, гонки — есть, что же тогда делать?
— Лодок нет

А ведь и правда, никто на тот момент не мог назвать ни одной игры с использованием водного вида транспорта. «Окей, сделаем простенькую игру, чтобы научиться. Вода и лодочки, что может быть проще?» — подумали мы, и собрались искать движок, на основе которого могли бы сделать игру.

Никто из нас даже не думал о 2D игре, сразу все представляли 3D — «инновации» ведь.

Все мы знаем о нашумевшем CryEngine, скачали, потыкали. Поняли, что нельзя в бесплатной версии скомпилировать игру.

Дальше само собой в интернете зарекомендовал себя Unity3D. Бесплатный, большое комьюнити и конечно же кроссплатформенный. Выбрали именно Unity3D, веских причин в выборе не было, просто не знали тогда, чего мы хотим.

Скачали, потыкали и разошлись. Каждый у себя дома по своему разбирался. Сидели, смотрели видео-уроки и пытались сделать примитивные вещи — земля, небо, вода и персонаж, который бегает по земле.

Один из четверых быстро потерял интерес — в течение недели ничему не научился и забил на это дело. Второй втянулся, по урокам сделал машинку (3d-прямоугольник и 4 цилиндра), которая как-то управлялась и даже сделал лодочку (3d-прямоугольник), которая плавает и тонет. Спустя неделю он тоже забил на это дело.

Осталось в команде разработчиков 2 человека, мы вместе сидели и смотрели уроки и делились друг с другом успехами.

Разработка

1-2-й месяцы — разбираемся с движком

Втянулись в это настолько, что сидели по 6-9 часов и делали игру про лодочки. Мы не понимали, что мы делаем и что из этого получится. Дальше мы втянулись в разработку ещё больше и каждый день занимались по 8-12 часов в сутки, даже без выходных. Это действительно было очень интересно и увлекательно. Мы уже умели писать скрипты и многое изучили в Unity, меняли поведение лодки, меняли модельки лодок, пытались сделать, чтобы они стреляли. Это все удавалось с трудом, но у нас получилось. Мы сделали 5 заспавненых лодок, в которые можно стрелять, у них тратятся жизни и они взрываются.

Первая версия игры

Первая версия игры (немножко посвежее)

3-5-й месяцы — создаем мультиплеер

Когда мы узнали, что игра может работать и в браузере, решили сделать её для социальных сетей, вдохновившись одним браузерным шутером. У нас даже образовался некий концепт игры — браузерная онлайн-игра, основанная на водном виде транспорта. Геймплей должен быть простым — лодки игроков спавнятся в разных местах и с помощью пулеметов, нацепленных на лодках, игроки должны уничтожать друг друга. Конечно, игра должна быть мультиплеерной. На этом моменте скорость разработки немного упала, нам пришлось изучать сетевую составляющую движка Unity3D, воспользовавшись стандартным сетевым решением.

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

Мы добились того, чего хотели, мультиплеер был сделан в комнатном режиме: кто-то заходит в игру, создает сервер (комнату) и попадает в игру. Можно было плавать по сети и стрелять друг в друга, никаких очков и систем достижения, там даже ник нельзя было посмотреть.

6-ой месяц — создание GUI и рефакторинг

До этого игра была без какого-либо GUI: вы заходите в игру и сразу попадаете на сцену с водой, где две кнопки «присоединиться» и «создать сервер». Две недели мы потратили на изучение GUI. Делали опять же стандартным решением, без каких либо плагинов. На самом деле — это то ещё извращение.

Сделав хоть какое-то главное меню в игре, мы взялись за рефакторинг кода. Почему? Да потому что мы начали писать игру на Javascript (UnityScript). Почему? Во-первых, я знаю оригинальный JavaScript, во-вторых, разработчики Unity позиционируют JavaScript упрощенным языком для новичков. В общем, перешли мы на C#, две недели занял рефакторинг кода, но мы не пожалели, нам действительно стало удобнее писать на C# в MS Visual Studio.

7-8-й месяцы — занимаемся рестайлом игры

Внешний вид игры нас категорически не устраивал. Мы меняли модельки лодок много раз, меняли текстуры. Перестраивали террайн, изучали технологию, по которой выцепили карту высот реальной местности (озеро Рица) и еще на несколько раз перерисовывали текстуры террайна, убирали и ставили деревья, кусты и т.д.

Много мучились с шейдерами и, собственно, с самой водой. Оказывается, красивую воду, да ещё и с волнами, не так просто сделать. Перебрали много ассетов, пытались писать сами, но ничего не подходило и не выходило. Решили пока оставить стандартную воду без волн.

Конечно, сами мы модели не делали, так как оба программисты и в моделировании совершенно не разбирались. Уже подумывали над тем, чтобы взять себе в команду художника по трехмерной графике.

//habrastorage.org/files/df1/6d2/14d/df16d214dedc4053933be538ecfabaf9.jpg

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

Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 3Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 4Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 5Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 6

9-10-й месяцы — переделываем сетевую часть

В связи с тем, что стандартное сетевое решение не давало того, что нужно, а именно — онлайн побольше, независимость сервера от игроков и, конечно же, система уровней, прокачки, достижений, это все должно где-то храниться. Пересмотрели много сторонних сетевых решений, авторитарный сервер позволяют сделать не многие из них. Решили сделать не авторитарный сервер. Нам подошел Photon Server. Изучали его где-то неделю, но поняли, что он не подходит по двум причинам: не нашли способа запустить несколько копий сервера на одном физическом и вычитали на сайте Photon ограничение по количеству слотов на сервере.

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

Нас не устраивало то, как работает свой сервер. Теперь угадайте, что мы сделали? Правильно, снова нашли сетевое решение, но не совсем готовое — мы взяли библиотеку lidgren, совместили с protobuf и потратили ещё две недели на то, чтобы это все переделать. Такое решение устраивало нас больше, сервер работал лучше и надежнее. Но, конечно же, не без багов.

11-й месяц — выкладываем игру во ВКонтакте

Нам порядком уже надоедает вести одностороннюю разработку, без какого-либо фидбэка. Да-да, всё это время мы разрабатывали игру вдвоем и никто, кроме тестеров, её не видел. Решились выпустить альфа-версию игры во ВКонтакте, чтобы протестировать нагрузку на сервер и получить отзывы от сообщества. Может быть узнали бы, чего хотят от игры сами игроки. Привязали VK API, скомпилировали, загрузили на сервер и добавили приложение в ВК.

Выложить игру во ВКонтакте оказалось непросто: мы пролетели со всеми поблажками, которые были до этого во «Вконтакте», а именно: не требовался сертификат SSL, было бесплатное размещение в списке «Новые приложения». Чуть чуть не успели. Нам пришлось регистрировать SSL-сертификат, хорошо деньги тратить не пришлось, по статье на Хабре получили бесплатный сертификат. Но и это еще не все: модерация не пускала нас, требовали перевести игру на русский язык и добавить правила/пояснения к игре. Краткие правила к игре мы добавили, в качестве отдельного окошка, но не могли понять, что нужно было перевести в игре, ведь она и так на русском.

В итоге перевели слова «current» и «all» в правом нижнем углу экрана. Отправили игру снова на модерацию, только после этого её внесли в каталог.

12-й месяц — ищем единомышленников в команду

Посмотрев, что игроки заходят и играют, нас это обрадовало, но не надолго. Мы понимали, что такими темпами мы будем разрабатывать игру ещё лет пять. Поэтому начали писать объявления о поиске единомышленников. Сначала художников по трехмерной графике — от них мы узнали, что моделисты создают модели исходя из чертежей, эскизов, скетчей. Отсюда мы поняли, что нам не обойтись без концепт-художника.

Переговорили буквально с десятками концепт-художников и ни один не мог нарисовать то, что нам нужно. Ну и, конечно, никто не хотел работать на энтузиазме.

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

Так же подключили рекламу в приложении «Вконтакте», надеясь, что хоть хостинг-то окупится.

Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 7
Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 8
Как мы потратили 1 год и 3 месяца на разработку браузерной игры - 9

13-14-й месяцы — разработка в разгаре

Нашу игру в ВК установили уже около 7 000 человек, поиграло в общем около 10 000 человек. Бывали онлайны, которые в итоге ломали наш сервер. Проявлялись баги в игре. Перспектива впереди, хотелось дальше заниматься разработкой, но времени уже на разработку было меньше. Работа, все дела. Делали следующее обновление для игры, но разработка велась очень медленно, за два месяца сделали очень мало.

15-й месяц — конец разработки

Времени становилось все меньше, а нерешаемых проблем все больше, никто не хотел вступать к нам в команду, ни один дизайнер, художник так и не смог нарисовать то, что было нужно. Мы делали модельки сами, раскрашивали их сами, но понимали, что это все затянется ещё на несколько лет. В итоге разработку пришлось забросить. Игра ещё месяц-два работала в пассиве, реклама приносила копейки, за все время с игры мы получили ~600 рублей, на хостинг потратили ~500 рублей, на домен ~300 рублей, а ещё много нервов и времени на разработку.

Вывод

Игру можно создать не имея опыта в разработке игр, но нужно иметь хорошую команду, где каждый член команды будет заниматься своим делом. Если в команде будет 10 программистов, и больше никого, ничего хорошего вы с этого не получите.

Опять же, собрать команду энтузиастов очень сложно, каждый хочет жить на что-то и урвать свой кусок хлеба.

За этот год я научился очень многому в сфере разработки игр и понял, что нужно предварительно написать Дизайн-документ, на основе которого будет разрабатываться игра. Без него у вас в голове будет куча бесконечных идей, которые вы будете пытаться реализовать, прыгая от одной к другой. Конечно, мы для своей игры делали Дизайн-документ, но только спустя полгода разработки.

Вообще, разрабатывать игру — это достаточно увлекательный процесс. В отличие от разработки сайтов или прикладного и системного ПО, в играх есть над чем посмеяться. Да, разработка игры местами забавляет своими багами. Если у вас уйма времени и вы устали от рутинной работы, можете смело попробовать себя в разработке игр. Не обязательно создавать свою игру, можете присоединиться к какой-нибудь команде, где, может быть, именно вас так сильно не хватает.

Автор: Temka193

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js