Мобильная Action-RPG от первого лица в одиночку: с нуля до релиза

Процесс создания, как долго, сколько стоит, что нужно

Мобильная Action-RPG от первого лица в одиночку: с нуля до релиза

О себе, старт разработки

Привет! Перед рассказом пару слов о себе. Я довольно давно в индустрии, специализируюсь на гейм-дизайне и представление о разработке игр имеется. Однако полностью самостоятельно делать игры не приходилось - только в команде. Конечно, я пробовал начинать разные pet projects, но это было лишь для того чтобы изучить что-то конкретное, типа определенную механику проверить или уровень собрать. Здесь же своего рода челлендж: делать все одному и обязательно нужно довести дело до конца.

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

Серьезно взяться за разработку игры, чтобы довести ее до конца получилось случайно. Скачав несколько бесплатных ассетов с механиками из Unity Asset Store, я сначала просто разбирался как оно устроено. В какой-то момент я собрал простенький уровень-лабиринт и сделал билд под iPhone. На удивление все запустилось с первого раза, и мне понравилось управлять персонажем. То есть кор механика поначалу была лишь просто ходить по лабиринту и искать выход, но я решил попробовать развить эту мысль...

Проработка механики игры и формирование вижена

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

О самой игре и цели:

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

В итоге было решено делать 3D Dungeon Crawler с милишной боевкой в наиболее распространенном сеттинге средневекового/тёмного фэнтези. Почему так?

  • Легче искать ассеты, легче их сочетать
  • Не нужно заморачиваться насчет главного персонажа, ни как выглядит, ни анимировать, ни настраивать камеру от третьего лица
  • Упрощенная боевая система проста в освоении и не нуждается в тонком тюнинге
Тестовый уровень и элементы управления
Тестовый уровень и элементы управления

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

Управление:

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

Боевая система:

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

Параметры персонажа:

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

Сеттинг и арт:

Я немного фанат серии Souls, поэтому вдохновение в плане атмосферы и идей для локаций черпал главным образом оттуда. Но при этом игра должна была быть легка в освоении как Minecraft. Кор геймплей немного подсмотрен также из TES: Blades.

Создание уровней

Определившись с общим видением игры, я приступил к разработке уровней. Это оказалась самой объемной частью создания игры. Я прекрасно понимал, что это займет много времени и нужно что-то придумать, какой-то хак… Поначалу, когда я думал о просто лабиринте, казалось что легко смогу сделать 50 уровней по типу Wolfenstein 3D, ну а что - потолок, пол, стены да и все! Позже, сделав несколько тестовых вариантов, я решил усложнить как структуру уровней, так и арт. От ретро стиля вообще отказался в угоду эдакому “стилизованному реализму”, взяв за референс Legend of Grimrock + TES: Blades. Идея была в том, чтобы параллельно делать уровни и дорабатывать механику, подгоняя их друг под друга.

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

  1. Сеттинг: Dark Fantasy, замок/подземелья
  2. Один-два ассета по окружению для разнообразия, и чтобы их можно было сочетать
  3. Распределить уровни по сложности структуры. Простые в начале, более запутанные лабиринты в середине, а последние можно снова попроще
  4. Количество не больше 10, но размеров побольше
  5. Должны отличаться по атмосфере/визуалу
Два базовых ассета для создания всего окружения в стиле Dark Fantasy
Два базовых ассета для создания всего окружения в стиле Dark Fantasy

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

Карта уровня в финальной версии игры
Карта уровня в финальной версии игры

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

Добавление врагов в игру

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

Скелет - базовый враг на тестовом уровне
Скелет - базовый враг на тестовом уровне

В целом были приняты следующие решения для оптимизации времени на разработку при создании врагов:

  1. Единый паттерн и структура анимаций NPC: все имеют одинаковый набор движений
  2. Враги не могут блокировать удары даже если у них есть щит
  3. Нет анимаций стрейфов и разворотов. Для этого много причин, начиная от упрощения стейт машины, и заканчивая тем, что не для всех моделей есть полный набор анимаций в сторах
  4. Когда враги в айдле - они ходят обычно, но как только переходят в состояние боя - к ним применяется billboard механика (то есть автоматически всегда повернуты в сторону игрока)
  5. Сагрившись однажды они уже всегда будут преследовать игрока, пока не убьют или сами не будут убиты
  6. Не стал делать, чтобы враги не видели сквозь стены, ибо решение было еще более простое - не ставить врагов близко к стенам

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

Как видно, враги получались со множеством допущений. Хотелось как-то разнообразить их… поэтому я добавил вариативности по высоте: есть обычные враги - гуманоидные (склеты, призраки и т.д.), есть низкие враги - типа адских собак, а есть высокие - прящие, типа летучих мышей. Для атаки каждого типа нужно соответственно направлять камеру при необходимости вверх и вниз.

3 типа врагов по высоте: собаки, гуманоиды, летающие
3 типа врагов по высоте: собаки, гуманоиды, летающие

Система лута/эквипа

В такой игре должен быть лут и эквип! Однако сделать это хотелось не усложняя систему наличием инвентаря и механикой drag’n drop. Я остановился на механике быстрых слотов в количестве 6 шт. Должно лишь соблюдаться ограничение - не больше 6 предметов на уровень одновременно. Игрок может экипировать или использовать нужный предмет простым тапом.

Лут в игре разделен на 3 типа:

  1. Экипировка: оружие и щиты
  2. Апгрейды/бонусы
  3. Расходники (бутылки)
Виды лута/экипировки: potion, armour, power-up
Виды лута/экипировки: potion, armour, power-up

Экипировка доступна как с самого начала уровня (уже активна на персонаже), так и может быть подобрана в процессе прохождения уровня. Она меняет характеристики атаки и защиты соответственно свои параметрам. Более лучшая экипировка полностью заменяет старую. Однако иногда старая имеет преимущества в виде более быстрой атаки, что удобнее для некоторых врагов. Новая экипировка всегда переходит на следующий уровень.

Апгрейды/бонусы призваны бустить характеристики игрока только локально на уровне. Можно собрать усиление к максимальному здоровью, к максимальной атаке и к максимальной защите. Эти бонусы также разделены на разные градации, что дает около десятка видов. Все они желательны к нахождению, чтобы “прокачать” параметры к моменту последней комнаты с боссом. Буст параметров сохраняется только в течение данного уровня и не переходит на другие. В то же время, для каждого нового уровня параметры персонажа растут сами по себе, как и у врагов.

Расходники - это пополнялки здоровья. В будущем может будут и другие варианты. Сейчас это обычное зелье - дает 30% здоровья, можно найти на уровнях, а также премиальное зелье - восстанавливает все 100% здоровья, его можно купить за деньги (это часть монетизации).

Улучшения по ходу разработки

По сравнению с первоначальной идеей в течение разработки игры были сделаны множественные усложнения базового игрового процесса. Так была добавлена система запертых дверей с поиском ключей по типу классического Doom. Это дало больше разнообразия, интерактивности и ненапряжного бэктрекинга.

Система дверей в игре: нужен ключ соответствующего цвета чтобы открыть
Система дверей в игре: нужен ключ соответствующего цвета чтобы открыть

По части боевой системы была добавлена механика чардж атаки, когда вместо обычного нажатия кнопки можно зажать ее еще на пару секунд и получить +50% к урону. Так же стала меняться скорость передвижения в зависимости от количества экипированных вещей. Быстрее всего персонаж перемещается если не держит в руках ничего. Если держит только оружие - ходит чуть медленнее, если и оружие, и щит - значительно медленнее. Это дает больше простора для тактики, а также экономит время на длинных дистанциях.

Разработка UI (интерфейса игры)

Несмотря на простоту интерфейса игры, его создание заняло больше ожидаемого времени. Было необходимо с максимальной эффективностью скомпоновать элементы и сделать основную функцию - выбор уровня - наиболее удобной с минимальным количеством экранов (одним). Было около 10 итераций прежде чем получился финальный вариант. Немного позже я захотел добавить хоть какой-то туториал, что сделал в виде отдельной странички с объяснением что есть что, также сделал переключение языков.

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

Оформление: 2D арт и звуки

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

Лого я разработал сам, как и иконку для стора. Логотип получился сразу и устроил меня полностью, наверное потому что за референс был взят беспроигрышный вариант: Fantastic Beasts... + The Lord of the Rings.

Как появилось лого игры
Как появилось лого игры

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

  1. Должна отражать суть игры, жанр
  2. Выделяться среди других в сторе
  3. Быть четкой и строгой
  4. Хорошо смотреться на рабочем столе планшета и телефона при любой теме

В итоге иконка прошла через где-то 20 итераций, большая часть из которых минорные изменения по типу сделать линию на пискель тоньше или тень на 10% менее насыщенной.

Основные итерации иконки игры
Основные итерации иконки игры

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

Тем не менее, у меня были конкретные требования к музыке и звукам:

  1. Треки должны быть в меру эпичными и запоминающимися
  2. Они также должны быть естественно зациклены
  3. Все должно звучать ненавязчиво и не раздражать
  4. Тема главного экрана помпезная, но короткая
  5. Тема меню спокойная и уверенная
  6. Звуки врагов должны соответствовать их внешнему виду
  7. Звуки персонажа - нейтральны и универсальны

Полировка и оптимизация

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

Сюда же я бы отнес все работы по освещению, по настройке шейдеров. Это часть разработки заняла чуть ли не 20% всего времени создания игры. Большая часть из которого - это работа над освещением, подбор/оптимизация шейдеров и текстур, запекание света.

Вот некоторая часть данных по настройке/оптимизации:

  1. Весь основной свет запекается в лайтмапы
  2. У врагов тени нечестные, сделаны прожекторами
  3. Часть источников света Mixed lights - там, где надо динамично красиво подсветить, типа факелов на стенах
  4. Чтобы выделить врагов и сделать их более заметными в темных коридорах - они также подсвечиваются отдельно и гасятся при смерти
  5. Большую часть объема игры занимают текстуры и лайтмапы, поэтому их нужно максимально оптимизировать и сжимать где только можно
  6. Старался использовать как можно меньше шейдеров - это понятно, но задействовал также и тяжелые шейдеры типа Standard и Legacy

Как итог данных манипуляций с изначальных 3-5 FPS игра идет в 25-30 FPS на девайсах 2014 года, размер приложения сократился с 1,5 Гб до 380 Мб.

Монетизация и продвижение

Для данной игры я решил выбрать премиальную модель распространения, и пока опубликовать ее только в магазине Apple. Хотелось выложить как можно раньше и дорабатывать патчами, сначала для одной платформы. Такая модель не очень удобна для продвижения, но мне хотелось чтобы игроки именно сначала вложились в игру. Это чисто субъективное решение. Возможно, релиз для Android будет сделан по Freemium модели.

Рекламы в игре не планировалась никогда, только IAP, помогающие сэкономить время или компенсировать скилл. А именно:

  • Открытие сразу всех уровней, если хочется “просто побегать, посмотреть”
  • Зелья 100% восстановления, для подстраховки не случай нехватки тех, что предусмотрены не уровне

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

Можно рассчитывать, что о вашей игре узнают лишь:

  • В обзоре/стриме на Youtube
  • В каком-нибудь жанровом тематическом сообществе на FB/VK
  • Случайно увидят рекламу в Instagram

При этом обзорщики и стримеры Youtube как-то не очень охотно берутся рассказывать о неизвестной игре. Сообщества соцсетей как правило немногочисленны, вы не найдете таковых с сотнями тысяч подписчиков, поэтому ваш пост “полезно увидят” человек может 10-100.

Есть еще тематические ресурсы с большим охватом по всем каналам распространения, но их стоимость неподъемна для скромного инди разработчика. То же самое верно и для различных сервисов продвижения.

В итоге по большому счету остается рассчитывать только на органические установки из поиска в магазине приложений. Поэтому совет в данном случае уделить максимальное внимание оформлению странички игры (ASO): скриншотам, видео, описанию, иконке.

Стоимость разработки

Самое дорогое - это, без сомнения, ваше время. Его потребуется просто уйма, а также вагон мотивации чтобы все это довести до конца. Особенно если разработка ведется в свободное от основной работы время, как в моем случае. Я был занят по 13-14 часов в день на протяжении почти года. Это очень непросто!

Что до денег, то тут примерно вот так (цены приблизительны):

  • Подписка Apple Developer $100
  • Покупка ассетов для окружения $50
  • Ассеты для оформления $50
  • Модели персонажей $100

Итого получается примерно $300 и 1 год времени. Затраты на продвижение я сюда не включаю, ибо это очень непостоянная величина. На данный момент я потратил примерно $150 на оплату показов видео, летсплеев или новостей об игре (как в России так и не Западе). Эффективность этих мероприятий оценить трудно.

Используемые технологии, софт

Internet платформы, которые использовались для поиска ассетов:

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

Софт, который так или иначе был задействован:

  • Unity как движок игры
  • Photoshop / Affinity для работы с 2D графикой
  • Mixamo для недостающих анимаций
  • Blender / Meshlab для работы с 3D
  • Audacity для обработки звуков и музыки
  • Visual Studio / Sublime text для кода
  • iMovie / Quicktime / Handbrake для работы с видео
  • Google Workspace tools для написания дизайнов и расчета баланса

На этом все, спасибо что дочитали! Надеюсь было интересно и кому-то полезно. Удачи и мотивации вам в работе :) Напоследок немного скриншотов в процессе/было/стало.

Что в итоге получилось можно увидеть в этом небольшом видео для App Store, поискать прохождения на Youtube или скачать саму игру по ссылке ниже ;)

231231
45 комментариев

Как на игру сделаную в одно лицо очень даже достойно

10
Ответить

Попробовал бы, да я не яблочник.

7
Ответить

Андроид в ближайших планах ✌️

2
Ответить

А не было проблем с тем, что игра с таким названием уже существует в Стиме?

7
Ответить

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

Ответить

Возможно я пропустил, сколько удалось заработать?

4
Ответить

Комментарий недоступен

5
Ответить