xdrider

xdrider

https://store.steampowered.com/app/2024820/Deep_Alchemy_Dungeon/
Пикабушник
2285 рейтинг 86 подписчиков 13 подписок 19 постов 12 в горячем
Награды:
5 лет на Пикабу
55

Sci-Fi  мобильный мультиплейер

Sci-Fi  мобильный мультиплейер

Мы с приятелем, уже пару лет пишем на досуге игры. В основном мобильные, и в основном тактические. Успешностью их сильно не загоняемся, и в рекламу сильно не вкладываемся. Последний год мы потратили на пошаговый мобильный стэлс, с системой прокачки. Самой сложной проблемой оказался геймдизайн, который отнял половину всего времени. И, честно говоря, хотелось немного отдохнуть, но не бросая любимое дело. Поэтому мы немного поштурмовали , что можно сделать совсем простого и мобильного, но при этом чтобы можно было играть и в онлайн. Название выбрали незатейливое Fast Finger Rule или Право Быстрого Пальца. Сначала хотели матом, как завещал создатель Peace Death, но постеснялись.

Придумали мы в итоге такую механику. У каждого соперника есть своя личная планета. Между прочим, даже в скайриме и майнкрафте такого нет, особенно в начале. А тут сразу целая планета. Вокруг каждой планеты по орбите вращается орудие. Вращение орудия постоянно замедляется. При выстреле скорость вращения становится максимальной. Соответственно, можно дождаться минимальной скорости и попасть почти наверняка, а можно пытаться быстро стрелять наугад или пытаться подловить темп. Противник, тоже реагирует на выбранную тактику и пытается к ней адаптироваться.

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

Программировать здесь особо было нечего, поэтому через неделю мы перешли к придумыванию новых щитов для планет, чтобы разнообразить игру. Добавили щиты с регенерацией, движушиеся щиты, сегментные щиты, щиты которые не пробиваются, но не закрывают планету целиком. Самый, наверное, интересный щит из того, что удалось придумать это Decelerator. Он в 12 раз замедляет скорость снарядов противника и позволяет сбить их своими при должной сноровке. Сейчас щитов 10. На подходе ещё 4 штуки.

На это ушла ещё пара недель. И в таком виде игра была уже играбельна и, в принципе, нравилась знакомым. Поиграть можно было и с ботом и в режиме разделенного экрана, вдвоем или вчетвером.

Затем, наступил момент прикрутить наконец мультиплейер. Момент, который я откладывал изо всех сил, так как у меня в этом не было никакого опыта. Я покурил форумы юнити и отобрал 3 названия фреймворков:

- SmartFox

- Mirror (не путать с одноименной порноигрой, хотя сходство между ними есть)

- PhotonPUN2

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

Миррор оказался перспективней. Он был настолько интегрирован в юнити, что позволял даже вызывать RPC (ремоут коллы) на методах наследуемых объектов и понимал пользовательские типы, объявленные в юнити. Фотон такого не умеет, хотя при должных навыках это оказалось не нужной фичей. Так как, я, сходу, не нашёл нормального подробного туториала по использованию миррор, хотя он на самом деле есть на геймдев-тиви в платном виде, то сама концепция RPC, синхронизации переменных и User Authority отняла недели 3, чтобы вкурить самому методом тыка. Это было сложно и неприятно, но после того как начало получаться, ловишь себя на мысли, что не хочется теперь возвращаться к однопользовательским играм.

Игру пришлось переписать с нуля, так как она не вписывалась в multiplayer архитектуру, благо она была простая. На мирроре всё отлично работало по локальной сети и даже по мобильной, если прописать ip-адрес сервера. Вопросы возникли на этапе, когда надо было перейти к созданию румов и матчингу большого количества игроков. Оказалось, встроенных методов как это сделать в миррор нету и надо самому реализовывать распределение портов на сервере. В принципе для этого есть даже какие-то фреймворки в Asset Store, но я всегда исходил из принципа, чем меньше в проекте каких-то непонятных фреймворков, тем меньше у тебя проблем.

Как итог, я выбрал Photon Pun. Фотон предоставляет, помимо фреймворка, ещё матчинг серверы, поэтому, там, в принципе, создание румов и матчинг игроков пишется в несколько строк кода.

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

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

Пока наша реклама толком не заработала, возможно пакстанские маркетологи осторожные ребята. А может 3 потраченных доллара и 5 установок это в пакистане сам по себе успех.

В данный момент игра бесплатна и доступна в гугл-плей и на аппсторе. По сети можно поиграть с другом, можно поиграть в разделенный экран. Иногда даже можно случайно попасть на кого-то из нашей команды запустив поиск игры. Мы постепенно допиливаем новые фичи. Например, набив достаточно кристаллов можно включить абилки, которые позволяют выстрелом оттолкнуть мину к планете соперника, чтобы она там взорвалась. Или взять под контроль НЛО, чтобы они атаковали чужую планету.

Дальше в планах кампании, обучающий режим, возможно пользовательские чарты и авторизация. Потом стим... Ну а потом посмотрим. Надо когда-то вернуться к истокам и доделать клон Mark Of The Ninja.


P.S. Называется решили отвлечься на месяц-другой.

Показать полностью 1 1
14

История подпольной игровой студии - 2

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


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

Где-то на год я сосредоточился на карьере на основной работе, и на личных приключениях, пока снова не стало стыдно за бездарно потраченное время. И тут мне попалась реклама курсов на Udemy. Я купил несколько курсов по Unity и это стало ключевым моментом. Мне повезло, тем, что попались курсы, которые подготовил Ben Tristem.

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

Например:

- Как наличие минимальной гравитации в арканоидах позволяет избегать бесконечного зацикливания.

- Зачем надо добавлять небольшие рандомные искажения углов отскока

- Как эффективно использовать Scriptable Objects

- Как использовать Singleton и Don’tDestroyOnLoad

- На каком этапе игры надо экспериментировать с настройками физики

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

и много чего другого, сейчас и не вспомню.


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


Суммарно я наверное прошел разных курсов по юнити штук 10. Что ещё могу сказать, никогда не берите курсы, которые называются Authorized <что-то там> course. Как правило, их записывают чуваки, которые были в команде какой-нибудь суперуспешной гиперказуалки. Эти курсы такие же бодрые и бессмысленные, как и работа их авторов. Впрочем, если вы любите, чтобы вам пересказали своими словами, под мотивирующую музыку, help Unity, то можете попробовать.


И конечно, вам надо знать английский. Качественных курсов на русском почти не существуют. Хотя, я взял пару курсов Сакутина по спецэффектам и паттернам проектирования. Остальные русскоязычные авторы, на тот, момент, показались мне какими-то фриками.


При этом не нужно быть программистом, Tristem описывает так, что простой код можно писать сразу, дальше если вы никогда его не писали. Фактически, пример проекта с Top-Down Space Shooter из курса, вдохновил меня на создание следующего проекта SpacePort. Игра создавалась не на продажу, а, скорее, чтобы проверить насколько я могу:

1. Оперировать большим количеством объектов

2. Поддерживать код с большим количеством разных сцен

3. Оперировать объектами движущимися по сложным двумерным траекториям

4. Поддерживать сохранение и восстановления большого количества объектов

Выглядит это вот так:

Итак, с чем я столкнулся во время разработки и что понял для себя:

Сразу скажу, профессионалы это знают сразу, поэтому им это будет не интересно, а вот новички могут долго искать ответ на такие вопросы:

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


2. Из-за ошибки в архитектуре мне пришлось делать апгрейды пушек в реал-тайм режиме. Это значит, что если я сохранился, и у меня было несколько пушек с апгрейдами, то сначала загружается уровень с базовыми пушками, а затем им делается апгрейд через 20 миллисекунд. Это удобно делать при помощи корутин. Такие ошибки в архитектуре у любителей встречаются часто. Хотя у профессионалов тоже встречаются ещё и не такие ошибки, просто им обычно не с руки признать неправоту. Так что не надо сразу загоняться.


3. Проблемы с тем, чтобы сориентировать двухмерный объект в 2D игре в направлении цели при помощи LookAt(). Я прочитал кучу форумов и как и советовали, написал свой обработчик. Потом понял, что работа LookAt() зависит не только от оси вращения. Так же важно, чтобы в нулевом состоянии объекта он смотрел вправо.


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


5. Компиляция через IL2CPP, очень сильно улучшает производительность игры. Прямо вот в разы.


6. Многие начинающие девелоперы боятся слова оптимизация производительности. В итоге получаются простенькие гиперказуалки, которые могут испарить ваш телефон. Однако, это не так страшно. Возьмем, например Unity 2017 Game Optimization. Большинство советов оттуда можно имплементировать за полчаса. Например:


a. удалите все пустые Start() и Update() процедуры в игровых объектах. Процедура Update() вызывается каждый фрейм и если у вас много снарядов с такой пустой процедурой, то каждый фрейм вы делаете десятки или сотни пустых запусков.


b. Вместо вызовов GetComponent<Class>() используйте прямой доступ к компонентам


c. Старайтесь не использовать Vector4.Distance, Vector3.Distance, Vector2.Distance. Лучше сравнивать между собой квадраты расстоняний, чем сами расстояния.


И так далее. Я за 2 дня пробежался по книжке, ещё 2 дня у меня ушло на имплементацию простых техник. В итоге, код стал работать даже на утюгах. Единственное, что быстрый успех сильно пьянит и с оптимизацией, главное, вовремя остановиться.

Из нетехнических проблем сложным было


1. Сделать прогресс уровней. Так как игра уникальная, то не получится подсмотреть какой-нибудь Tower Defence или, ещё хуже, Веселую ферму и сделать “Как у них”. Пришлось всё придумывать из головы. Это помимо того, что надо тестировать большое количество вариантов постройки базы. Сначала это интересная работа, но через 3 дня подряд хочется кого-нибудь убить. Поэтому я постоянно делал паузы, в которые либо не делал ничего, либо писал технический кусок кода, а потом возвращался к проектированию уровней. Когда часто отвлекаешься от проектирования, то мозг иногда выдает оригинальные варианты.


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


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


4. Подобрать музыку. Обычно я беру её на Premium Bit. Проблема в том, что сразу нельзя понять вписывается она в игру или нет. Через пару дней только осознаешь, что выбрал какое-то шило, хотя раньше трек казался идеальным. Поэтому, сейчас, я выбираю музыку на протяжении всей разработки, а не в самом конце. Когда хочу отдохнуть от сложных задач, то иду выбирать трек. Ставлю в игру, потом удаляю. И так, постепенно, прихожу к нужному результату.

Работал над игрой я вместе с дизайнером, Егором. Он подключился ко мне, ещё когда я делал Ninja Turf и так и остался. Во многом, только благодаря его работе и идеям Space Port получился играбельным. Не знаю, что его держит рядом со мной уже столько времени. Я думаю, что он надеется найти наконец стартап, в котором разбогатеет. А из всех стартаперов-неудачников, которых он знает, я наверное, самый упорный(ну или упоротый).


В чём я убедился ещё, запуская Space Port, так это в том, что все эти игровые каталоги приносят 0 трафика. 50-200 долларов лучше потратить тупо на рекламу в фейсбуке.


Вот пока ссылка на Space Port в Google Play:

https://play.google.com/store/apps/details?id=com.Spectre17....

игра полгостью бесплатная и без рекламы


P.S. А в следующем посте, я, наконец, подойду к UFO Stalker, которую я буду релизить в стиме в сентябре и она уже собрала немало вишлистов и установок демы. А так же всё-таки расскажу про командную работу.

Показать полностью 1
36

История подпольной игровой студии

Всем привет.

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


В 2014 я поиграл в Mark of the Ninja, после чего понял, что просто до боли хочу создать что-то похожее. Да и в принципе обидно, когда тебя в 36 спрашивают а чем ты гордишься, а тебе по чесноку и сказать-то нечего, кроме того, сколько персонала ты уже уволил за свою жизнь.


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

Получилось что-то такое:

Через год попыток создать лучшую в мире игру, я потерял дизайнера, ко мне присоединялись и уходили программисты.


С одной стороны, глупо было упорствовать и пытаться создать Stealth такого качества, как Mark of the Ninja, но я категорически не хотел работать над каким-нибудь очередным match 3 и продолжал. 4 раза я упрощал концепцию. В начале, это должен был быть полноценный стелс с ниндзей-демоном, который может ползать по стенам и потолку и использовать кучу хитрых девайсов, убивая врагов электричеством, кислотой, ловушками. В 4-й версии это был уже простенький платформер. На это ушел ещё один год.


За это время интересный момент получился с анимацией. Поскольку я в молодости лет 10 занимался карате, а потом ещё лет 10 акробатикой, то чтобы сделать реалистичные удары и сальто я пошел в зал и просто записал их на камеру. А затем построил анимацию по кадрам. Так вот анимация ударов ногами (прямого и удара в развороте) вполне себе вписалась в игру, а вот реальное сальто в игре выглядело убого.

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

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


В конце этого года, команда, которая работала со мной, разбежалась. Я не смог сработаться с ребятами, которые хотели построить всю архитектуру наперед и 2 месяца бодались по поводу правил кодирования. Через полгода двое из них выпустили свой платформер, который заимствовал некоторые моменты из моей игры. Он был сделан довольно профессионально, но провалился финансово. После этого ребята подались в другие типы стартапов, поскольку их страстью были деньги, а у меня была идея и я продолжал.


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


Я набросал вот такой рисунок уровня:

Это мобильная пошаговая игра с экраном 3х5, в которой надо дойти из одного угла экрана в другой, прячась от охранников в нишах и дверях. Любое столкновение с охранником летально. И если охранник если видит вас на одной горизонтали с собой, то на первый ход он прицеливается, на второй ход стреляет.


После этого мне повезло ещё раз и мне попался хороший .Net девелопер, который и запилил весь код. Я только рисовал уровни и продумывал геймдизайн. Суммарно я отрисовал уровней 90.


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


Уровни же я ранжировал по количеству попыток прохождения мной и количеству шагов на проход. В итоге получился Ninja Turf. Игра намертво цепляла людей, но проблема была в ужасной картинке и том, как вовлечь людей поиграть минут 20.


Выглядит это так:

Потратив около 1000 долларов на гугл рекламу и получив довольно скромные показатели ретеншн, я решил, что хочу делать следующую версию, но уже с учетом ошибок. Но в этот момент оказалось, что программист, с которым я работал, оказался надолго перегружен. Я оказался не в состоянии поддерживать чужой C# код и мне пришлось положить игру под сукно и потом почти год я больше занимался основной работой и личной жизнью.


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


Из сухого остатка, я потратил

- полгода времени (учитываем что я не являюсь профессиональным дизайнером или программистом)

-300 долларов на графические ассеты, которые мне не пригодились

-1000 долларов на анимацию у сторонней студии

-1000 долларов на рекламный трафик (надо понимать, что я на тот момент совсем не интересовался как делается реклама и просто слил эти деньги в движок google ads)

- 200-300 долларов на регистрации, лицензии и всякую мелочь

-700 долларов на курсы по рисованию (их я взял целую кучу, некоторые мне подарили друзья на день рожденья)


Продолжение следует. В нем я собираюсь рассказать благодаря чему я научился писать более-менее поддерживаемый устойчивый код. С какими ещё типами программистов/дизайнеров/художников я неудачно/удачно столкнулся. И что мне удалось довести до магазинов в гугл-плей и стим.


А пока, страница Ninja Turf в Google Play: https://play.google.com/store/apps/details?id=com.turf.turnb...

Показать полностью 2 3
Отличная работа, все прочитано!