История создания одной новогодней игры

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


Так началась разработка Animal Adventure: Downhill Rush.

История создания одной новогодней игры Gamedev, Разработка игр, Игры, Unity, Инди, Видео, Длиннопост

Сам по себе я инди разработчик. Ранее, в свободное от работы время, занимался изучением Unity (игровой движок), Blender (3д моделирование), Krita (текстурки порисовать и прочее). Изучение началось в далеком 2015 году. С тех пор за моими плечами вышло 3 проекта на мобильные платформы. Текущий, к слову, разрабатывался на фулл тайм. Последние 2,5-3 месяца и вовсе приходилось сидеть по 16-17 часов в сутки (к сожалению, релиз перенести можно всегда, а вот Рождественские и Новогодние праздники ну никак не поддавались переносу, пришлось делать все возможное, чтобы успеть в срок).


И тут мне сразу вспомнился недавний пост Инди Девелопер. Какая же это все-таки правда :D


Забавно, но каждый проект обучает чему-то новому. Данный проект не исключение. В нем я впервые начал экспериментировать с написанием фрагментных шейдеров. Хочу сказать, что это был великолепный опыт. В своей игре я использую полностью свои самописные шейдеры. Стояла задача получить максимально возможную красивую картинку при наименьших затратах на железо. Важно было иметь следующие эффекты:

- Specular (в моем случае это блеск от солнца на поверхности снега)

- Rim light effect (свечение объекта по контуру, хорошо можно увидеть на контуре елок, используемых в игре)

- Mixed lightmaps + shadowmask (тут все просто, компоновка динамического + статического освещения)

- Cubemap fog (туман, который тянется из кубомапы, а не просто одиночный цвет)


Собственно и все, по сути просто, найти решение в интернете да воплотить это все в рамках одного шейдера, но на практике оказалось все куда серьезнее, ибо ключевой момент был - оптимизация. Важно было запустить всю эту красоту в 60fps на Android + чтобы это все работало не 1-2 минуты, а минимум 10 минут без падения частоты кадров в силу нагрева устройства. Получилось ли у меня это сделать, сложно сказать, по отзывам вроде пользователи в восторге от оптимизации, думаю можно считать это маленькой победой :)

История создания одной новогодней игры Gamedev, Разработка игр, Игры, Unity, Инди, Видео, Длиннопост

Серьезной проблемой, с которой столкнулся во время разработки, был размер исходного файла. Хотелось получить размер насколько маленький, насколько это возможно. Можно конечно перечислить что-то банальное, вроде сжатие текстур, звуков, компрессия моделей и прочее. Но очень интересным моментом нашел для себя то, что вставленные на сцену Particle System компоненты жрут очень много памяти.


Если немного отойти в сторонку, уровни у меня практически на 100% состоят из заранее подготовленных префабов. Ну кажется, какая тут может быть проблема, ну встроил ты префаб на сцену, скорее всего там будет некий ссылочный тип, много памяти есть не должно. Оказывается это совсем не так. Банальный инстансинг Particle System объектов в начале запуска сцены мог сэкономить порядка одного мегабайта за сцену. Долго не думая, я начал тестировать наиболее прожорливые компоненты, и пришел к выводу, что Audio Source, Particle System, TextMesh Pro UGUI стоит урезать настолько, насколько это возможно. Для сравнения приведу иерархию карточки уровня из игрового меню до и после:

История создания одной новогодней игры Gamedev, Разработка игр, Игры, Unity, Инди, Видео, Длиннопост

Подобные нехитрые манипуляции в итоге позволили избавится от почти 15 мегабайт лишнего веса. Итоговый apk-файл на данный момент находится в районе 69мб. В принципе, довольно приемлемый размер, не слишком большой, чтобы отпугнуть игрока от скачивания.


При разработке открыл для себя очень хороший инструмент: Trello. В нем я создал свой проект, разбил доску по категориям (To Do, Doing, Done и пару других). В рамках каждой категории просто создаешь карточку, описываешь в ней задачу, устанавливаешь эстимейты по времени, добавляешь необходимые детали и потом можно просто перетаскивать карточку из одной категории в другую. Например сегодня нужно работать над уровнем 10, пожалуйста, перетягиваем карточку из To Do в Doing и вперед за работу. Эстимейты помогают не расслабляться, без них можно не заметить, что какая-та задача отнимает слишком много времени, они позволяют строить планы на будущее, ориентироваться о приблизительных сроках завершения работы и многое другое. Не знаю, почему я раньше не использовал подобный инструмент, это останется загадкой :)

История создания одной новогодней игры Gamedev, Разработка игр, Игры, Unity, Инди, Видео, Длиннопост

Безусловно, в любом проекте очень важно иметь контроль версий. Всякое может случиться, сломался компьютер, сгорел винт, нечаянно удалил всю папку с проектом, над которой работал последние 10 лет и многое другое. Я в этом деле использовал Bitbucket в связке с клиентом Sourcetree. Довольно быстрая настройка и можно уже плодить комиты, пушить все это дело в облако и не бояться, что завтра вдруг что-то пойдет не так и будет страх потерять месяцы, а то и годы неуклонной работы.


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

История создания одной новогодней игры Gamedev, Разработка игр, Игры, Unity, Инди, Видео, Длиннопост

Очень хотелось бы отметить важность открытого бета тестирования в Google Play. Его я запустил ещё в конце сентября. Получилось чуть больше двух месяцев игра была на стадии открытого бета теста. За это время удалось набрать чуть более 40 тысяч установок (ну, радости особой это не прибавило, в основном это Tier 3 страны, от которых доход меньше чем 0). Но с другой стороны, я получил просто колоссальное количество отзывов по игре. Было безумно сложно, но в конечном итоге на выходе получилась чуть ли не новая игра. Так много неочевидных вещей были скрыты от замыленного за многие месяцы разработки глаза, что порой не замечал очевидных недоработок и прочих мелочей.


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


Настоятельно рекомендую хотя бы месяц подержать открытый бета тест. Сложно сказать, как получить большое количество игроков. С моей стороны я всего лишь делал посты в соц сетях (twitter, facebook, vk и инстаграм) и оно как-то само пошло. Кто-то добавлял игру в топ на ютюб (совершенно бесплатно, без моего ведома) и вот так получилось набрать за время бета теста установки.


Если у вас очень хорошая игра, то вместе с бета тестом обязательно стоит отправить заявку на Early Access в Google. Я отправлял, игра не прошла :( , но если все-таки получится, это может дать просто огромный прирост установок!


Помимо Early Access можно попытать удачу в Indie Corner. Заявку на неё я подавал в первый день после релиза и о чудо, вроде бы получил положительный ответ. Сказали подписать NDA и ждать дальнейших указаний. Жаль правда вот-вот наступают Рождественские каникулы в USA и видимо в подборку инди проектов я уже попаду после Нового года, а это немного грустно (если я вообще в неё попаду, мало ли что, ещё пока толком не понятно чем это все закончится).

Что имеем в итоге, релиз был 20-го декабря (в этот четверг). Пока потихоньку игра набирает установки, заказывал обзоры на ютюб (взял просто несколько каналов, которые использовал при продвижении своей прошлой игры). Сейчас посмотрю недельку, какой вообще будет выхлоп от всего этого (чувствую, никакой) и скорее всего попробую стучаться к издателям. Все-таки, если не родился с лишними 10-15к$, то запускать игру - это гиблое дело, ничего хорошего из этого не выйдет.


Как-то так, всех с наступающими новогодними праздниками :)

Лига Разработчиков Видеоигр

6.6K поста22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"