Опыт создания первой игры под Android на Unity
Доброго времени суток, дорогие пикабушники. Множество раз я читал истории успеха (и не очень) от разработчиков (и не очень) игр - и вот настала моя очередь рассказать, что да как. Что сделал, что не сделал, что получилось легко и быстро, а где затупил.
Желание делать игры появилось очень давно, в те времена, когда еще даже компьютера своего не было, только денди. Тогда я рисовал в тетради схематичных человечков: руки-ноги, пытался просчитать координаты движения точек, чтобы получился идущий человек. Разумеется, ни знаний, ни техники не хватало - поэтому разработка игр осталась лишь мечтой когда-нибудь на будущее.
Спустя много лет, в университете, когда появились знания и некоторый навык программирования я начал придумывать, какие игры хотел бы сделать. Идей в голову приходило много, большинство из них вызывали лишь смех на следующий же день, но особо живучие "дозревали" в голове еще пару недель и были опять же записаны в тетрадь/блокнот, дабы не потерять мысль, суть, изюминку. Но я не знал, что с ними делать дальше, не знал, как вообще делать игры.
Из полученного опыта: при записи "идеи на миллион" ее стоит описать хотя бы в несколько предложений, а лучше еще и рисунок хоть какой сделать.
В своих записях нашел "экшн с зениткой и ордами врагов" - вот что бы такого уникального это значило? А ведь когда-то вокруг этой фразы крутились вполне конкретные придуманные механики, модели оружия, баланс и прочее.
О знакомстве с Unity
К тому моменту я мог худо-бедно сделать что-то под Android для себя. Простенькое, с кнопочками, текстовыми полями, картинками. В принципе, подойдет, чтобы делать какие-нибудь игры в слова, разгадывание ребусов и тому подобное. Но сколько раз я ни пробовал взяться за такие игры - желание быстро пропадало, потому что это тупо скучно)).
И вот мне на ютубе попалось видео про Unity. Про то, какой он бесплатный, кроссплатформенный и в меру простой. Прочитав еще и про успех сделанной на нем CrossyRoad, мой изголодавшийся мозг решил - надо скачивать, разбираться и сделать уже что-то.
Какое ПО выбрать?
Мой выбор пал на вариант: "сделай все сам и бесплатно". Для создания графики использую Blender (3D), Inkscape (векторная графика) и Gimp (растровая графика). Даже папку с рабочими файлами этих программ назвал аббревиатурой - BIG.
Unity использую в связке с Visual Studio 2015 (если в команде менее 5 разработчиков, то VS также бесплатна, насколько я понял из лицензионного договора). Ну и для обработки звуков полезен Audacity. Музыку на нем, вроде как, не напишешь, но в текущем проекте пока и не надо было.
Начало пути и выбор идеи
Чтобы вообще понять, чего ждать от Unity я нашел первый же урок из разряда "игра на Unity за час" и склепал свою первую поделку, в которой что-то падало сверху, нужно было уворачиваться, не получилось - проиграл. Установил на телефон, запустил, сыграл - блаженству не было предела: теперь ты знаешь, как можно сделать игру! Оставалось лишь сделать свою, и чтобы она была интересной...
Достаточно быстро можно набраться опыта, чтобы делать простые вещи - создавать/уничтожать объекты, заставлять их двигаться в соответствии с пользовательским вводом или самостоятельно, отслеживать события столкновений, воспроизводить звуки и загружать сцены. В целом, этого должно быть достаточно, чтобы создать простую механику игры, а, при некоторой фантазии, можно эту механику сделать еще и интересной. Или забавной. А лучше и то, и другое.
Ключевым на этом этапе становится поиск действительно интересной идеи (чтобы не тратить время и силы на создание клона и так много раз клонированной какой-нибудь игры), и создание контента для игры с выбранной идеей. Под контентом я здесь подразумеваю модели, звуки, текстуры, алгоритмы и вообще все, что наполняет игру, делает из "игра про космические путешествия с управлением собственной командой" реальный игровой опыт путешествий в просторах космоса и налаживания взаимоотношений в коллективе NPC, которые никак не могут ужиться друг с другом.
Из полученного опыта: не стоит недооценивать затраты времени.
При создании первого проекта, когда еще нет опыта и многому приходится учиться, очень сложно оценить, как быстро получится сделать рабочий вариант игры. Я для себя вывел такие правила: если создаешь версию игры "для себя", чтобы понять понравится ли она хотя бы тебе, то время, за которое ожидаешь это сделать, можно домножать на 1,5 - 2. В мечтах все просто: добавим здесь кнопку, здесь противник будет двигаться обратно пропорционально квадрату синуса расстояния до игрока, здесь сделаем бонус, который добавляет +100 к скорости, но отнимает 100 от удачи - и игра станет бомбой. Но на практике обязательно вылезут какие-нибудь ошибки. Алгоритм поведения противников будет тупить, переменным будут присваиваться неожиданные значения, один и тот же кусок кода будет вести себя по-разному в зависимости от фазы луны. Для исправления всего этого неизбежного потребуется время, полученное после домножения на 1,5 - 2.
Если же создавать версию игры "для релиза", то рабочий процесс во многом упирается в работу с графикой и анимацией (модели должны уже быть полноценными, а не примитивами из версии "для себя") и зачастую сводится к: сделать -> проверить -> переделать -> проверить -> повторить. С ростом навыка повторять нужно будет реже. Ну и еще много времени уйдет на тестирование, оптимизацию и разного рода мелкие корректировки. В моем случае, реальные затраты времени превышали оценки раза в 3 или чуть больше.
После некоторых колебаний с выбором идеи, я остановился на следующей комбинации предварительных условий:
1) незамысловатый сюжет и мир игры
2) игра с управлением в одно касание - проста в реализации, хоть и ограничена в возможностях
3) достаточно простой уровень графики - выбранному типу сюжета и механике, несерьезный, полумультяшный стиль неплохо соответствует
4) желательно бесконечный игровой процесс, но с возможностью использовать результаты потраченного времени
3) юмор и приколы
Обо всем по порядку
Ехал я как-то на электричке или в метро, и пришла мне идея игры с лягушкой на кувшинке в пруду. Нажимаешь на экран - она выстреливает языком и ловит летающую муху. Счетчик очков увеличивается. Чуть ниже уровня полета мухи время от времени пролетает пчела/оса. И если так вышло, что коллайдер пчелы пересекся с коллайдером языка лягушки - теряется одна жизнь из трех. (На самом деле, чтобы никого не убивать в своей игре (кроме мух), у лягушки жизнь всего одна, просто она может вынести три укуса пчелы и получает нокаут).
Спустя некоторое время идея была реализована: лягушка - куб, мухи - кубы, пчела - куб, язык - параллелепипед, длина которого меняется программно через transform.localScale. Благодаря первым двум пунктам предварительных условий получилось в короткие сроки создать каркас игры, которой при подключении фантазии уже позволяет увидеть, как будет ощущаться будущая игра.
Из полученного опыта: прототип игры - очень важен.
Сложно недооценить значение прототипа. После того, как я создал версию игры из кубов в вакууме, я еще достаточно долгое время возился с кодом, скоростью мух и пчел, размерами коллайдеров, балансом. Важным знаком будет то, что если удается сделать так, что даже в прототип играть интересно - то работа над контентом будет оправдана. В противном же случае, время, потраченное на создание графики, моделей и прочего может быть потрачено впустую. Другими словами, создавая прототипы игр можно выбраковывать недостаточно проработанные механики.
После создания годного прототипа во всю началась работа с графикой. Мой личный выбор пал на вариант 3D. Во-первых, еще в школе баловался с 3DSmax, во-вторых, созданную один раз модель можно потом крутить как угодно, подбирая нужный ракурс. Но, опять же, это выбор из личных предпочтений, с 2D графикой на должном уровне не работал. Blender оказался на удивление удобным инструментом (после нескольких десятков часов привыкания), шустрым в работе и с огромным количеством обучающих материалов. Быстро получилось создать статичные модели - камыши на пруду, кувшинки, камни, облака. Анимированные модели заняли на порядок больше времени. В целом, третий пункт из предварительных условий позволил не углубляться в создание максимально детализированной графики (а в будущем и меньше проблем с оптимизацией возникает), оставаясь при этом в соответствии с концепцией игры.
Из полученного опыта: не стоит бояться изучать и делать что-то новое. Как минимум, нужно попробовать.
Помню, когда я создал статичную модель лягушки, точнее, две модели - с закрытым ртом и с открытым, когда она стреляет языком. Мне это казалось просто высшим достижением, хотя и в рамках игры выглядело, мягко говоря, колхозно. По внутренней оценке, я был способен создать анимацию 3D моделей только где-то через месяц - полтора. Однако, попробовав разобраться в скелетной анимации Blender и методами ее импортирования в Unity, я обнаружил, что создал анимированную версию лягушки уже через 3-4 дня.
Ну и заключительным этапом создания завершенной версии для релиза стало определение того варианта игры, которого будет достаточно. В процессе разработки легко увлечься, добавляя все новые и новые элементы, переключаясь с одного вида деятельности на другой, при этом дата выхода игры будет постоянно откладываться, но всегда будет "где-то через неделю". У меня это продолжалось несколько недель подряд. Чтобы завершить начатое, необходимо выполнить два условия: во-первых, решить что обязательно попадет в игру, а что обязательно останется на доработку и будет добавлено в обновлениях; и во-вторых, искоренить перфекционизм - определить необходимый уровень как будет реализовано то, что должно обязательно попасть в игру. Если пытаться сделать как можно лучше, то за это время придет видение того, как можно сделать еще лучше и так далее. В таком случае и Ахиллес не догонит черепаху.
В моем случае было необходимо определить, что должно быть в игре, чтобы обеспечивать бесконечный (при желании) процесс ловли мух, но при этом накопленные очки можно тратить, совершенствуя свой пруд, улучшая его различными способами.
Ну и последний в списке, но не последний для меня по важности пункт - юмор. Без него и сам процесс создания был бы более тяжким, и многое из того, что мне нравится в игре, не было бы сделано. Некоторые идеи приходили в голову во время работы, и затем были реализованы. Например, изначально я не планировал озвучивать лягушку как бы то ни было, но как-то раз мне вспомнилось видео с орущим сурком, которое я пересматривал десятками раз..)) (https://www.youtube.com/watch?v=Q_Qs-FRbTzY)
Также вариантов окна с результатами совместной игры было несколько, но выбрал именно тот, который вызывал у меня самого веселье и желание сыграть еще раз, по-другому))
Итог.
Спасибо всем, кто дочитал этот пост до конца. Надеюсь, было интересно и полезно. Приведенные здесь выводы из полученного опыта я пытался выделить более ясно для того, чтобы вы могли вспомнить о них, если когда будете делать свою игру. Надеюсь, они помогут сократить время выпуска первой версии игры с неопределенного "когда-то потом, когда все будет как представляется в фантазиях" до вполне оцениваемого, чтобы получить обратную связь (на что и сам надеюсь) и двигаться дальше.
Лягуха смотрит на тебя с уважением
Страница игры в GooglePlay: https://play.google.com/store/apps/details?id=com.FrogAndBee...
Лига Разработчиков Видеоигр
6.5K постов22K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"