Мемуары. Разработка первого проекта и публикация в Steam. Как надо (и как не надо) делать игры.
Всем привет!
Сразу скажу, что тут многабукаф, поэтому если интересна мораль, но лениво читать басню – прошу прямиком в конец поста, там есть итог.
Хочу поведать вам историю о том, как мы с товарищем создавали свою первую игру и выпускали ее в Steam. Можете считать это некоего рода пособием к тому, как надо (и как не надо) делать игры, и каких ошибок можно заранее избежать. Рекомендую к прочтению тем, кто хочет податься в геймдев, не имея при этом практически никаких навыков программирования и дизайна. Так как я выступал в основном в роли программиста, то повествования буду вести по большей части с этой точки зрения.
Итак, как обычно бывает в подобных историях, все началось со спонтанной идеи…
Идея.
Хочу заметить, что перед разработкой игры, о которой пойдет речь в этой истории, мы пытались разработать другую мультиплеерную игру. Не буду вдаваться в подробности, замечу лишь, что проект успешно заморожен до лучших дней. Но кое-какой опыт мы там приобрели, поэтому имели представление о том, как выглядит процесс разработки мультиплеерной игры. Замороженный проект разрабатывался изначально в качестве выпускной работы в универе, диплом мы успешно защитили, но доработать игру до выпуска в массы не удалось.
Кстати говоря, в наших универах яро хейтят все, что связано с играми. Потому что «это игрушки, для детей, кто это вообще будет покупать, серьезные люди таким не занимаются». Тем не менее, проект мы защитили на отлично, спасибо топовому научному руководителю. Но в любом случае грустно наблюдать такое отношение. При том, что на специализированных форумах встречаются сотни постов от иностранных студентов, которые выбрали в качестве проекта разработку игры. И у них это норма, а не странное исключение из правил.
Но это было лирическое отступление (коих будет много, крепитесь), теперь продолжим. Хотя нет, еще один важный момент.
Движок.
Когда мы начинали свой проект в универе, то первым делом начали подбор движка для разработки. Опыта программирования у нас было достаточно для того, чтобы знать принципы объектно-ориентированного программирования, и чтобы написать калькулятор, но не более. И вся эта движуха с выпускным проектом началось незадолго после того, как Unreal Engine 4 сделали бесплатным для всех. Но еще были доступны такие варианты как Unity3D, CryEngine, GameMaker(?). GameMaker был отметен сразу, так нет полноценной поддержки 3D, да и функционал там довольно плачевный, все-таки это не движок, а конструктор. CryEngine и Unity3D бесплатные и используют в качестве основного ЯП C++ и C# соответственно. Unreal Engine 4 также почти бесплатный (платится 5 процентов с каждой проданной копии), однако у него есть одно важное преимущество – наличие Blueprints Visual Scripting. Это система, позволяющая разработать игру фактически без написания кода в привычном понимании – весь скрипт представлен в виде схемы (графа алгоритма), что упрощает работу и снижает порог вхождения. А еще у UE4 приятный и удобный интерфейс, масса туториалов и понятной документации, отличный официальный Youtube-канал и активный форум. Поэтому выбор остановился именно на нем.
Вот теперь продолжим.
Начиналось лето, мы сидели без работы, прошлый проект заморожен, хотелось сделать что-то менее масштабное, что будет по силам команде из 2х человек. Спонтанно была предложена идея с мультиплеерным аэрохоккеем, ведь концепция звучит элементарно, что вполне реально сделать за лето (spoiler alert – мы не сделали за лето). И чтобы не просто аэрохоккей, а со всякими интересностями. В качестве интересностей выступали различные эффекты – коробка со случайным эффектом появляется на столе, игрок бьет по шайбе, шайба подбирает коробку для игрока, игрок использует эффект на себя или на противника, …, профит. Интуиция подсказывала, что таких эффектов можно придумать много, а это значительно разнообразит игровой процесс. План звучал многообещающе. Было решено, что если у меня получится разработать за неделю прототип основной механики, то мы займемся проектом вплотную.
Основная механика.
Казалось бы, что может быть проще, чем сделать биток, который гоняет шайбу по полю, и чтобы это еще работало в мультиплеере. И если с движением битка, казалось бы, проблем быть не должно, то с физикой шайбы все было не так просто. Есть 2 варианта реализации – сделать так, чтобы шайба двигалась от удара битком по физике (импульс рассчитывается в зависимости от гравитации, массы и прочих физических показателей), либо создать свою воннаби физику, при которой все подконтрольно разработчику, и можно предсказать поведение шайбы после удара.
По умолчанию, в UE4 физика объектов не репликатится (т.е. не передается от клиента к серверу и наоборот). А сделать так, чтобы она очень точно отображала свое положение одинаково на сервере и клиенте – та еще задачка. Да и предотвратить странное и нереалистичное поведение проблематично, ведь с физикой могут случаться время от времени всякие казусы.
Поэтому я решил опробовать второй подход – создать свою физику движения шайбы. Это обещало быть ооочень приятным времяпрепровождением, потому что с физикой у меня всегда были проблемы, ровно как и с векторами. Необходимо было сделать так, чтобы шайба для начала просто отскакивала в соответствии с нормалью удара битком, независимо от скорости битка. И чтобы она нормально рикошетила от стен. В случае удара битком, методом проб и ошибок, получилось понять, как должен высчитываться вектор движения шайбы после удара. Благо движок выдавал всю необходимую информацию – нормаль удара, локацию и так далее. А вот в случае с рикошетом от стен пришлось немного окунуться в векторную алгебру. Гугл помог найти формулу отражающегося вектора, оставалось только ее применить для моего случая…
У нас было 2 физических объекта, 3 вектора удара, 1 мощнейшая диаграмма взаимодействия этих векторов, формула вычисления результативного вектора и гора переменных, констант и всего такого, всех типов данных, а еще значения скорости и ускорения объектов, желание адекватного ощущения физики и 2 дюжины параметров физики шайбы, от трения до максимального ускорения. Не то, чтобы это все было нужно для реализации нормальной физики, но иди в своем увлечении до конца. Единственное, что меня беспокоило – это желание адекватного ощущения физики. В мире нет никого более беспомощного, безответственного и безнравственного, чем человек, который пытается сделать адекватное ощущение физического взаимодействия на кончиках пальцев. И я знал, что довольно скоро мы в это окунемся.
Само собой, прежде чем заниматься физикой шайбы, я сделал простое передвижение битка. Игрок управлял мышкой, и, по задумке, биток должен был кататься на экране, следуя за мышкой. Но на деле, с учетом необходимости репликации и неправильного подхода, управление было инертным и неприятным. Но для прототипа большего не требовалось.
Итак, спустя несколько дней, у нас был готов прототип базовой механики, который я продемонстрировал другу, дабы мы приняли решение о дальнейшей судьбе проекта. Очевидно, что это было довольно сыро, но надо было понять – будет ли кому-либо вообще интересно проводить время в игре с подобной механикой. Оказалось, что даже в сырой версии покатать против живого игрока довольно интересно. И это с учетом того, что у нас не было ни ворот, ни возможности забивания гола, ровно как и лимита по очкам в принципе. Мы решили, что разработке быть.
Пикапы.
Пришло время проработать систему пикапов – тех самых коробочек с эффектами, которые должны были разнообразить игру. Система была следующая – пикап подбирается шайбой, посредством удара. Эффект дается тому игроку, который последний дотрагивался до шайбы. Затем этот игрок может применить эффект либо к себе, либо к противнику, в зависимости от типа эффекта. Это может быть как дебафф, так и бафф. Примеры дебаффов: уменьшение размера битка противника, замедление битка, инвертирование движения. Примеры баффов: увеличение размера, защита ворот от попадания шайбы и так далее. Набор эффектов не ограничивался подобными банальностями, некоторые варианты были вполне себе интересными и оригинальными. Подбор нового эффекта заменял ранее подобранный, то есть у игрока под это был, грубо говоря, один слот в инвентаре. Также применение эффекта на себя или противника перезаписывало предыдущий наложенный эффект, то есть в один момент времени на игроке был опять же только один эффект. Наложенные эффекты исчезали после гола. Нет смысла подробно расписывать процесс создания этой системы, которая только в теории кажется простой, а на деле мультиплеер все довольно сильно усложняет. Важно то, что система работала, причем почти без сбоев.
Дебаг и шлифовка.
Теперь процесс разработки выглядел следующим образом – мы разрабатываем новые эффекты -> дебажим их -> понимаем, что система кривая -> переделываем систему. Важно понять одно – баги будут всегда, причем разной степени тяжести, вопрос только во времени их купирования. Еще один момент, который стоит принять – если систему можно оптимизировать и улучшить – лучше не лениться и сделать это как можно раньше. Если это облегчит работу в будущем, то крайне желательно потратить несколько дней на переделку того, что уже работает, вместо того, чтобы потом тратить по лишнему часу на реализацию каждого нового геймплейного элемента. Нереально решает наследование – без этого механизма невозможно сделать стройную систему, в которой все будет понятно и стабильно работать.
Изначально у нас были только пассивные эффекты. Затем мы придумали механику эффектов, которые активировались владельцем посредством ЛКМ. Первый такой эффект – магнетто. Он позволял притягивать к себе шайбу с любого расстояния, растрачивая при этом «стамину», которая постепенно восстанавливалась до максимального уровня. Или, например, такой эффект — вокруг битка образовывалась ударная волна, которая отбрасывала шайбу в соответствующем направлении.
Проблема в том, что изначальная система поддерживала только пассивные эффекты, поэтому ее пришлось полностью переделать, сделав 2 ветви наследования от базового класса эффектов – пассивки и активки. Каждый из классов обладал своими особенностями, которые передавались дочерним классам. Наследование в данном случае просто необходимо, так как у всех эффектов есть схожие черты, однако активные эффекты имеют ряд особенностей, отличающих их от пассивных.
Я не пожалел о том, что переделал систему под грамотное наследование, ведь в дальнейшем мне это сэкономило кучу времени. В один момент мы решили добавить пикапы, которые лучше не подбирать. На столе спавнится коробка красного цвета, при подборе на владельца накладывается негативный эффект. Благодаря наследованию буквально за час удалось изменить систему под новую особенность. Также механизм наследования пригодился при изменении визуального стиля – эффекты разделялись на позитивные, негативные для противника и негативные для владельца, а коробки эффектов раскрашивались зеленым, синим и красным соответственно.
Кстати, насчет визуального стиля. Пока я занимался разработкой, мой напарник занимался созданием 3D моделей и визуальных эффектов. Не совсем корректно называть объекты с эффектами «коробками», ведь на деле они выглядели плавающей в воздухе полупрозрачной искаженной сферой. С добавлением визуала игра преобразилась и стала ощущаться как следует.
Хотя отсутствие звуков все еще играло свою отрицательную роль. Стоит отметить, что опыта в создании визуальных эффектов у нас никакого не было, поэтому приходилось обучаться налету. Визуал постоянно переделывался, улучшался и видоизменялся, и, по моему субъективному мнению, внешне игра получилась на достойном уровне.
Конец лета.
Пропустим несколько недель и перенесемся на 31 августа. Вот что было готово к моменту, когда мы предполагали иметь уже готовый проект:
1) базовая механика взаимодействия шайбы и битка, которая ощущалась довольно топорно и выглядела нереалистично;
2) проработанная система эффектов;
3) визуал для большинства эффектов;
4) система режима игры (максимальное количество очков, уменьшение количества очков после забитого гола, перезапуск игры, спавн пикапов, шайбы, битка и так далее);
5) HUD с отображением очков и эффектов;
6) черновое главное меню.
Что нам оставалось сделать:
1) доработать физику шайбы и битка;
2) доделать все необходимые интерфейсы;
3) часто тестить игру и фиксить вылезающие баги;
4) добавить больше эффектов;
5) добавить звуки;
6) добавить визуал к эффектам, у которых его еще нет;
7) подготовиться к релизу в стим.
Само собой, дорабатывать за пару недель, и выпускать проект сырым в стим было бы глупо, поэтому мы решили работать ровно столько, сколько будет необходимо, а уже потом выкладываться на всеобщее обозрение.
Осень.
Осеннее лирическое отступление – при совместной разработке нереально решают инструменты контроля версий (source control). Это такая штука, которая позволяет хранить исходники в облаке, обновляя его параллельно, и не мешая друг другу работать над проектом. Проблема заключается только в том, что облако очень не любит бинарные файлы, так как их содержимое невозможно сравнивать. Этот инструмент идеален при работе с обычным кодом, но для визуального скрипта функционал ограничен. Нельзя работать одновременно с другими разработчиками над одним и тем же файлом, будь то уровень, или отдельный базовый класс, если вы хотите, чтобы все изменения файла сохранились. Мы использовали BitBucket на основе Git. Настройка сложная для неокрепших с точки зрения Git умов, но за день вполне реально получить работоспособную систему. Вернемся теперь к истории.
Осень началась с того, что я дорабатывал механику шайбы и битка. Результат был выкован вашим покорным гномом с потом и кровью в темных шахтах физических компонентов — теперь управление битком ощущалось на кончиках пальцев©, а шайба адекватно реагировала на силу удара, более менее реалистично замедлялась от ударов об стены, при этом приноровиться к игровым реалиям не составляло труда. Не буду вдаваться в подробности, скажу только, что на все это ушло несколько недель.
Звуки.
Я никогда не придавал особого значения звукам в играх. В AAA-проектах этот момент всегда отлично реализован, а от инди обычно запредельного качества не требуют. Столкнувшись же лицом к лицу с задачей создания звукового сопровождения для игры, я осознал всю тленность бытия. Найти качественный звук, без шумов, который бы подходил под визуальный эффект, затем свести его с визуалом, выровнять громкость и не сойти с ума – задача не из легких. Скорее всего, правильный подход – сначала найти звук, а потом уже делать под него визуальный эффект, но мы-то умные, мы начали с конца. Можно, конечно, отдать эту задачу на аутсорс, благо студий много, но никто не согласится работать за банку тушенки и спасибо. А у нас не было даже банки тушенки. Еще можно покупать огромные паки профессионально записанных звуков, среди которых огромная часть звуков тебе не пригодится. Или же покупать звуки на сайтах по одному, но это тоже встанет в копеечку. Поэтому мы искали бесплатные звуки, подгоняли их под визуал, редактировали питч, продолжительность, плавно заглушали, чистили от шумов и все в таком духе. Разбирались опять же на ходу, разумеется. А потом эти звуки еще надо было реализовать в игре, настроить их распространение в среде, чтобы заглушалось на дистанции, звучало неплохо и работало в мультиплеере.
Steam Direct.
Разработка шла своим чередом. За исключением того момента, когда вышла Divinity: Original Sin 2, после чего вся команда разработчиков практически выпала из процесса на несколько недель. Не смотря на это, мы добавили еще десяток эффектов, я занимался постоянными багофиксами, и в какой-то момент стало понятно, что багов становится все меньше, а значит можно готовиться к Steam Direct. Была прочитана несколько раз вся документация, открыт счет в банке, получен ИНН и оплачен входной взнос в Steam (6к рублей). Далее мы заполнили всю необходимую банковскую информацию. В Steam можно регистрироваться в качестве разработчика физическим лицом, поэтому регистрация ИП обошла нас стороны. В противном случае с налоговой системой мы бы вдоволь наелись шоколада. А так владелец счета отплачивает свои 13% подоходного налога и спит спокойно. И еще определенный процент отплачивает Steam’у и Epic Games. Если что-то останется – можно забрать себе.
Лирическое отступление. Как же сложно придумать название студии! Если с названием конкретно этой игры все было довольно просто (Air Hockey – отлично подходит для поиска по тэгу, да и не занято), то с названием студии все сложнее. Никаких ассоциаций не возникало, никаких идей не было. В итоге мы пошли подбирать рандомные, хорошо звучащие слова. Затем дошли до названия песен, потому что у них названия неплохо звучат, по большей части. В итоге спустя пару часов удалось найти неплохое и осмысленное название. Standby. Даже лого неплохое получилось.
Так вот, после проверки Steam’ом всей полученной информации, нам дали доступ в SteamWorks. И тут мы узнали, что значок разработчика убрали из стима, после чего мы свернули проект и забили на геймдев. Следующие шаги – выставить цены, создать страницу в магазине и залить свой первый shipping build. Подбор цены, а также страницу с описанием, трейлером и скриншотами мы сделали за пару дней. После чего был добавлен билд, и мы отправили все это на проверку в стим. Не считая небольшого казуса с редистрибутивами (directX и иже с ним), наша страница и билд были одобрены. Это означало, что релиз можно поставить на дату через 3 недели от текущей на тот момент. Поэтому мы выставили нашу страницу в магазин, планируя за оставшееся время отполировать все необходимое и получить на выходе конфетку. Надо было еще добавить ачивки, пофиксить оставшиеся баги и создать интерфейсы меню.
3 недели до релиза.
Релиз был назначен на 1 декабря, и было решено его не переносить. Поэтому нам надо было доделать все перечисленное выше. За третью неделю были пофикшены оставшиеся баги, и добавлена большая часть ачивок, а также настроен Steam Cloud для синхронизации сохранений.
2 недели до релиза.
Нам не нравится, что на фоне в игре у нас просто черный цвет. Сперва решили добавить просто абстрактную разноцветную HDRI, но потом передумали, и добавили полноценную двигающуюся космическую сферу. Таким образом, у нас уже был не просто аэрохоккей, а космический аэрохоккей!
Затем мой напарник нарисовал интерфейс для главного меню. Мне показалось, что вполне норм, но ему не нравилось, мол, выглядит как дешевая флешка, а не как полноценная игра. Поэтому мы начали придумывать что-то еще. Появилась идея создать 3D уровень с 3D интерфейсом, который встроен в окружение. То есть главное меню – это экран главного компьютера. Настройки – технический монитор сбоку, к которому прилетает камера, если кликнуть по кнопке. Ну и пролетка к игровому столу для бесшовного перехода в онлайн из главного меню. Вот так выглядел нарисованный концепт.
А раз уж у нас все с закосом под sci-fi, то и HUD надо переделывать. Собственно, на этом концепте мы и остановились, затратив примерно 2 недели на реализацию уровня, освещения, переходов и новых 3D менюшек. Сравнить как было и как стало вы можете ниже. Не могу не упомянуть ребят с сайта Game-Icons.net. Без них наша игра смотрелась бы в разы хуже. Это сайт с тысячами иконок, выполненных в одинаковом стиле, которые можно прям на сайте кастомизировать под ваши нужды. Так еще и авторы не просят за свою работу ничего, кроме упоминания их в проекте. Просто лучшие.
Как говорится, что делают нормальные разработчики за 2 недели до релиза? Думаете, полируют все, а потом сидят спокойно в ожидании релиза, занимаясь тестами и попивая чаек? Нет, вообще-то они добавляют свега. И полторы недели затрачивают на реализацию уровня, освещения, переходов и новых 3D менюшек, а потом это все дорабатывают, дебажат, делают красиво, чтобы смуф и силки. Закончив, мы обновили скриншоты и трейлер в магазине стима, ведь там весь этот свег отсутствовал.
3 дня до релиза.
Что должно произойти за три дня до релиза? Правильно, должен вылезти какой-то неуловимый баг. А лучше два. Во-первых, игроки не могли отныне находить друг друга в быстрой игре, хотя до этого все работало. Во-вторых, игра начала в случайные моменты времени зависать. Причем может быть без проблем несколько часов, а потом подряд через несколько раз зависать. И это параллельно с тем, что благодаря новому меню вылезла еще целая пачка багов, а некоторые ачивки отказывались работать.
14 часов до релиза.
Большая часть багов пофикшена, но пара ачивок все еще отказывается работать. Фризы больше не наблюдаются. А вот быстрый поиск игры пока что отдыхает.
6 часов до релиза.
Судя по Google Analytics, нашу страницу в стиме посещает огромное количество игроков. А игра еще не готова к релизу. Игра опять зависла. Пересчитываю седые волосы на голове.
3 часа до релиза.
Поиск быстрой игры пофикшен. Судя по тестам, игра больше не зависает. Делаю билд, и мы его долго и упорно тестируем. Полет отличный. Но парочка багов все еще осталась, хотя они не критичны и редко встречаются.
Релиз.
Количество просмотров страницы все еще растет. Фикшу баги. Постоянно заливаю новые билды в стим, после чего открываю для себя новые баги и повторяю процесс. Дышу полной грудью, потому что худшее позади, ведь баги некритичные, редко встречаются и легко фиксятся.
2 часа после релиза.
Как оказалось, худшее было только впереди. Кто бы мог подумать, но, видимо, если не заниматься маркетингом своей игры от слова совсем, то игру никто не будет покупать! Хотя просмотров, конечно, было много, но никто особо не заинтересовался. За несколько часов игру купило буквально 5 человек.
3 дня после релиза.
Игру купило человек 20. Мы наивно рассчитывали на число раз в 10 больше. Спойлер алерт – на момент написания поста количество продаж так и не приблизилось к этой отметке. Спустя месяц после начала продаж. Но вернемся к тому моменту. Мы активно пиарили игру нашим друзьям, списку контактов и все в таком духе. А еще нас ждало классное открытие – игра все же зависает время от времени. За полгода разработки это появилось только за пару недель до релиза. А с этим открытием мы начали получать отзывы в стим. Первый отзыв нас обрадовал, ведь человеку понравилась игра, он играл с другом, поэтому проблемы мертвого онлайна не вкусил. Упомянул редкую проблему с зависанием, но сказал, что в целом все неплохо. А потом пришли еще 2 пользователя с негативными обзорами. Они сказали, что игра лагает.
Лирическое отступление. Люди невероятно тупы. Не все, но таких много. Некоторые даже я. Но должно же быть очевидно, что при большом пинге играть в мультиплеерную проблематично. А особенно в ту, где шайба может летать на безумной скорости. То есть при пинге в 60 это будет не так приятно, как при 20, но что можно ожидать при пинге >100? Однако люди думают, что сидят на лане, и игра должна компенсировать пинг в 0.2 секунды, чтобы все было гладко. На деле все работает не совсем так. Даже с учетом сглаживания различий между сервером и клиентом это никогда не будет играться плавно. И тут проблема не в разработчике, хотя это тоже. Просто это ограничение, которые пока законы физики не научились обходить. Хотя умные разработчики движков и не только придумали различные механизмы для митигирования этой проблемы, что, впрочем, не решает ее полностью.
А еще один отзыв говорил, что игра писала Fatal Error при запуске. И вот честно скажу – я до сих пор понятия не имею, с чем это может быть связано. Однако больше подобных отзывов игра не получала, ровно как и записей в обсуждениях аналогичных не появлялось, а значит проблема крайне редкая, и скорее всего связана с софтом/железом игрока, нежели с самой игрой.
Что нормальный разработчик делает на 3 день, если продажи низкие, а у игры есть проблема с производительностью? Решает проблему с производительностью и активно продвигает игру. Что делаем мы? Ну, мы не совсем отбитые, поэтому проблему с зависаниями все-таки починили (это было связано частично с ачивками, но это не важно). Причем починили окончательно, тьфу-тьфу-тьфу, больше с этим не сталкивались. А вот насчет игры у нас был следующий план. Мы решили пока не заниматься пиаром в социальных медиа и иже с ними.
Потому что мы решили поменять механику пикапов. Да, 3 дня после релиза, а мы переделываем одну из базовых механик, которая работала гладко и без проблем. Идея была в том, что раньше эффект, примененный на цель, заменял старый. Теперь же мы хотели сделать так, чтобы все примененные эффекты сохранялись на цели. То есть противника можно будет уменьшить, замедлить, проклясть множеством способов и все в таком духе. Само собой, что все это безумие обнулялось после гола. Но возможные комбинации звучали интересно и интригующе. Планировалось, что после реализации системы мы сделаем новый трейлер, и тогда уже начнем продвижение в соц. медиа.
Я предполагал, что на реализацию уйдет несколько дней минимум, однако вскоре был приятно удивлен тем, как существующая система изящно трансформировалась в новую без особых трудностей. Некоторые функции пришлось переписать, а также немного переделать интерфейс под отображение нескольких эффектов за раз, но в целом все получилось без проблем. Уже на следующий день мы занялись тестами реализации.
До работы над трейлером еще несколько наших знакомых поиграли и составили свое мнение. А также появилось больше информации от игроков, которая шла из отзывов (их было мало), из заметок к рефандам (их, к счастью, было тоже немного), и из обсуждений. Все просили хотя бы AI, так как онлайн пуст, а многим не с кем играть.
AI.
Изначально мы планировали игру как исключительно фановую штуку, в которую будет интересно играть только с друзьями, а соло игроки смогут найти друг друга в быстрой игре. В реальности онлайн лежал мертвый, а бОльшая часть игроков покупала соло, из чего очевидно вытекала проблема. Поэтому мы решили делать ИИ.
Что происходит у нормального разработчика, когда он хочет написать достойный ИИ? Он читает литературу, смотрит туторы, планирует, тестирует и реализует. Что происходит у меня? У меня перестает работать видеокарта.
Лирическое отступление. Термопасту на видеокарте все-таки надо менять время от времени, а то она обижается и перестает работать. Даже если у вас стоит больше десятка кулеров на корпусе и парочка на самой видеокарте. Благо мне повезло, что в ремонте за небольшую цену мне починили мою родную GTX780, а то покупать перед новым годом видеокарту за банку тушенки было бы не весело. Ведь, как известно, у меня не было даже банки тушенки.
Пока моя видеокарта была в стационаре, я занимался ИИ на интегрированной карте. Стоит отметить, что даже на интегрированной карте наша игра работала, пусть и в 20 фпс! Оказалось, что разбираться с ИИ не так уж и страшно, как я предполагал. Поэтому, через две недели после релиза мы выпустили первое большое обновление. В этом обновление было 5 уровней сложности искусственного интеллекта, новая система пикапов, реализованные запросы с форума, расширенные настройки игры и багофиксы. Также мы записали новый трейлер и обновили страницу в магазине.
Прошло еще некоторое время, и вот я пишу эту огромную стену текста. Может быть кому-то она покажется полезной, может кто-то посчитает это интересным, а большая часть аудитории просто пройдет мимо. Это неважно. Важен только итог. Поэтому к нему и перейдем.
Итог.
За 6 месяцев вполне реально вдвоем создать с нуля неплохую нишевую игру. Да, в ней нет сюжета, она подходит больше для убивания времени. Но это игра, в нее интересно играть, и это не только мое мнение. Конечно, мы знали некоторые основы и были не совсем без опыта. В противном случае это могло бы занять месяцев восемь, а то и больше. Но, по факту, за довольно короткий промежуток времени была создана полноценная игра, разработкой которой занималось два человека, обладающих базовыми знаниями по программированию и 3D моделингу. И за это время был получен бесценный опыт. Пусть даже и не окупившийся в конечном итоге. По крайней мере на момент написания поста.
Unreal Engine 4 отличный движок, на котором можно вполне себе программировать без особой подготовки за счет наличия визуального скриптинга. И можно создать полноценную игру без единой строчки кода — это подтверждает и наша игра, и множество других. Проблема этого подхода в том, что в некоторых случаях сильно просаживается производительность (при математических вычислениях каждый тик, или же на мобильных устройствах со слабым железом), а иногда имеющегося набора встроенных функций не хватает, но тогда на помощь приходят плагины. Да и всегда можно написать небольшой модуль самому, если очень захотеть. А уж какие штуки тут можно вытворять с С++… Да, движок не без багов и недостатков, но Epic Games действительно проводят невероятную работу над своим детищем. И он точно стоит своих 5% с каждой проданной копии.
Мультиплеерные игры делать намного сложнее, чем одиночные. Во-первых, многие вещи сложно синхронизировать между сервером и клиентами. Во-вторых, очень неудобно тестировать реализованные вещи. Иногда банально нужен второй играющий с тобой человек. А для этого необходимо создавать новый билд, куда-то его заливать, а потом уже тестировать с другим человеком. Это замедляет все процессы, особенно дебаг. А еще люди не понимают, как работает Networking, и что такое пинг.
Мультиплеерные игры сложнее продавать. Множество хороших независимых игр постепенно теряет онлайн, его очень тяжело поддерживать, при этом очень много людей предпочитают играть соло. В общем, если у вас есть желание создать онлайн игру – продумайте заранее стратегию продвижения, наберите группу заинтересованных людей, чтобы на первых порах ваша игра была не пуста, тем самым не отпугивая обычных игроков. И крайне желательно добавить ИИ, на случай, если что-то все-таки пойдет не так.
SteamWorks обладает широким функционалом, и попасть туда несложно. Пройти Steam Direct не составляет особого труда. Steam предоставляет разработчикам инструменты, с помощью которых можно отслеживать заинтересованную в вашем продукте аудиторию и заниматься продвижением. А еще первый месяц после релиза ваша игра активно продвигается внутренними механизмами стима, отображаясь в рекомендациях тем игрокам, кто заинтересован аналогичными тегами. Просмотров страницы будет много, главное чтобы еще покупали. Или добавляли в вишлист, что тоже неплохо. И числовые показатели, связанные с этим, тоже можно отслеживать самостоятельно.
Продвижение чрезвычайно важно. Независимо от качества вашей игры она пройдет незамеченной игроками, если вы не подумаете об этом заранее. Социальные медиа наше все. А если есть бюджет, то можно и за денежку попиариться.
Баги и недовольные игроки есть во всех играх. Даже в богоподобном Витчере. Надо это просто принять как факт, если есть желание заниматься геймдевом, и, не смотря ни на что, продолжать делать ваш проект лучше.
А еще есть люди, которые готовы помочь. На нашу игру писали обзоры ребята, которых мы едва знали, не прося ничего взамен. При этом делали это объективно и качественно. И всячески помогали с продвижением. Плагины для UE4, которые мы использовали, писал человек, который делал это бесплатно. И результатом его работы пользуются тысячи. На просторах интернета много бесплатной музыки и звуков, которые туда выкладывают на условиях Attribution License (можно использовать в коммерческих проектах, с упоминанием автора).
И самое главное. Геймдев – это круто. Не важно, какой проект вы хотите сделать. Главное делать это ради идеи, а не ради получения денег с дешевой поделки или копипасты чужих идей. Любой проект это в первую очередь бесценный опыт, который в дальнейшем точно будет полезен. Все шедевральные игры начинались с малого.
Лучшие комментарии
Да, во время разработки можно использовать только Blueprints. Собственно наш проект создан полностью без C++. Если не хватает функционала — можно находить или покупать необходимые плагины. Вот у нас используется бесплатный плагин для взаимодействия со Steam (отправление инвайта, получение информации о профиле и так далее).
В целом Blueprint библиотек более чем достаточно для некрупного проекта — можно реализовать практически что угодно. Вопрос только в производительности и целевой платформе — для слабых мобилок лучше все-таки С++.
Есть вопрос. Возможно ли во время всей разработки пользоваться только Blueprints? И Вы сами использовали с++ в проекте и как часто?
Вообще столько знакомых штук в тексте. Не знаю радоваться или плакать. Работать пол года почти за спасибо. Эх.
И ведь у нас все было в плане — даже маркетинг после релиза был по задумке. Просто конечный продукт мы были готовы показать буквально за несколько дней до релиза, поэтому и продвигать раньше было нечего.
Пока читала вступительную часть, поймала себя на мысли что потихоньку сама пытаюсь составить алгоритмы и представить как может быть реализован код (переменные, классы, функции и т.д.).
Как итог, даже захотелось поподробнее ознакомится с движком и попробовать реализовать какую-нибудь из имеющихся идей, хотя бы в целях практики^^
В общем желаю вашей студии дальнейших успехов, и спасибо за блог!)
В нашем учебном заведении тоже особо не жаловали людей, желавших творить игры в качестве курсачей или дипломов, и меня это всегда печалило.
Я крайне рекомендую последовать своему зову и попробовать себя на этом поприще. В наше время для инди открыто много возможностей — это и бесплатные движки, и стим, и тонны обучающего материала. Порог вхождения минимальный, тем более если обладать базовыми навыками в программировании. А с желанием и идеями можно действительно создать что-то стоящее. Даже просто копаться в движке и реализовывать всякие небольшие фичи довольно интересно, пусть и в качестве хобби.