xdrider

xdrider

https://store.steampowered.com/app/2024820/Deep_Alchemy_Dungeon/
Пикабушник
2252 рейтинг 83 подписчика 12 подписок 18 постов 12 в горячем
Награды:
5 лет на Пикабу
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 акробатикой, то чтобы сделать реалистичные удары и сальто я пошел в зал и просто записал их на камеру. А затем построил анимацию по кадрам. Так вот анимация ударов ногами (прямого и удара в развороте) вполне себе вписалась в игру, а вот реальное сальто в игре выглядело убого.

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

История подпольной игровой студии Инди игра, Стелс, Unity, Android, Пошаговая стратегия, Видео, Длиннопост

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


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


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


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

История подпольной игровой студии Инди игра, Стелс, Unity, Android, Пошаговая стратегия, Видео, Длиннопост

Это мобильная пошаговая игра с экраном 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 2
Отличная работа, все прочитано!