Работая в программистом в области никак не связанной с играми я вдруг решил написать мобильную игру. Не зная ни инструментов, ни технологий и специфики разработки. Какой она получилась? Какие выводы я для себя сделал и может ли геймдев быть хобби – всё под катом.
Некоторое время назад у меня возникла идея: «А не написать ли компьютерную игру?» Думаю, что такая мысль приходит почти к любому программисту. Все мы, когда только начинаем изучать профессию, грезим созданием новых World Of Warcraft’ов, Counter Strike’ов или, как минимум, «Веселых ферм». Но потом школьно-студенческие годы заканчиваются и мы начинаем писать то, за что платят.
Первую и единственную свою игру я написал на Delphi лет десять назад, когда только изучал программирование. Это был убогий клон вертикальных слайдеров-стрелялок, который дико глючил и тормозил. Я понял, что для разработки чего-то путного нужно не только желание, но и немалые знания в области работы с графикой, и что при разработке «интересное программирование» займет десять процентов времени, а остальное уйдет на решение совсем не романтических технических проблем. Поэтому идею написания игр я забросил еще до ВУЗа и на сегодняшний день уже пять лет счастливо работаю в области интеграции корпоративных систем.
Однако, пару месяцев назад мне захотелось написать что-нибудь «для души». К тому же стремительно развитие мобильных приложений вызывает ощущение, что рядом происходит что-то очень интересное, но без меня. «Не порядок!» — решил я и кинулся копать в сторону разработки мобильных игрушек.
И вот тут начинается самое интересное…
Во-первых, очень радует обилие различных готовых движков. Причем бесплатных и простых в освоении.
Во-вторых, куча маркетов и сайтов с приложениями, где можно честно делиться своими трудами.
В-третьих – множество статей, уроков, туториалов и т.д. и т.п. Одних статей на Хабре вполне хватает, чтобы получить представление о технологиях и инструментах.
Так что решение было однозначным – делать!
Первые четыре-пять идей-прототипов были безжалостно выкинуты или отложены до лучших времен.
Причины самые разные: некоторые были слишком сложными в разработке, некоторые оказывались плохими клонами существующих продуктов, некоторые банально требовали большого объема работы по созданию контента.
Тогда я сел и решил сформулировать требования к будущей игре.
В итоге остановился на следующей концепции: Мяч прыгает по платформам. Задача – «допрыгать» до финиша и не упасть. Управление – одним пальцем. Коснулся, потянул, отпустил. Никаких кнопок или других элементов управления, кроме меню.
В качестве движка был выбран Unity3d. Во-первых, по нему много информации, во-вторых, с 3d я дружу гораздо лучше, чем с 2d. Сделать простенькие модельки и собрать из них уровни показалось куда проще, чем пытаться нарисовать «кривыми» руками красивые спрайты.
Итак, цель ясна, поехали!
Первое, чего не хватало – контент. Даже самая проста игра – это не только функции и классы, но и модели, текстуры, звуки. Программисты редко бывают художниками. Музыкантами – еще реже. А и тем, и другим, и третьим – почти никогда.
Контент нужно было либо искать на стоках, либо заказывать у специалистов, либо делать самому. Платные стоки и индивидуальный заказ отпали сразу – речь шла не о коммерческом приложении, и вкладывать в него деньги не было смысла. На бесплатных стоках найти что-то путное не получалось – процесс поиска напоминал копание в большой урне, куда выбросили все, что было под рукой.
Остался последний вариант – делать все самому. В итоге от чего-то пришлось отказаться, как, например, от фоновой музыки. Зато я получил массу удовольствия от изучения 3d инструментов. Самым крутым оказался 3d Studio Max. Жаль, что время его тестового использования ограничено одним месяцем. Если вдруг займусь этой областью профессионально – обязательно куплю. А так вполне выручает бесплатный Blender.
Со звуками тоже оказалось не сложно – несколько коротких звуковых эффектов на падение мяча, «сбор» звездочек и завершение уровня были сделаны с помощью бесплатного Audacity. Можно было сделать и больше и лучше, но тут проблема не в инструменте, а в навыках.
Второй проблемой стала архитектура приложения. Описать классы и их назначение – это не беда, а вот склеить их как-то с Unity, который я на момент начала разработки открыл в первый раз – гораздо сложнее. Как собрать весь этот зоопарк в кучу, когда возможности инструмента узнаешь по ходу разработки? Переписать все с начала и по-человечески хотелось через каждые несколько часов разработки. Постоянно узнавал что-то новое и старое решение казалось идиотским.
Очень быстро пришло осознание того, что если гнаться за качеством кода, то игра не будет сделана никогда. В итоге продумывались только те моменты, которые реально влияли на разработку и использовались во многих местах – десяток префабов с подвешенными на них скриптами-контроллерами. Остальное – хардкод и анархия.
Кажется, что я использовал все антипаттерны, которые только есть – хардкод, копипастинг и т.д. Ни в коем случае не призываю так делать, но не могу не обратить внимание на то, что это позволило сократить время разработки раза в три. На выходе – работающая игра и отвратительный код, который никто никогда не увидит.
Еще одной бедой игр, о которой я никогда не задумывался оказался баланс. Даже в моей мини-игре сложность уровней должна была постепенно возрастать. Причем не только размер, а именно сложность. Пропорционально должны были возрастать начисляемые за прохождение очки.
Первый вариант игры оказался мега-хардкорным, хотя я его проходил без проблем и думал, что все в порядке. Но «альфа-тестирование» с помощью близких людей показало, что игра непроходима если не ты сам ее писал.
Пришлось многое упрощать, оптимизировать, добавлять «страховочные» элементы, не позволяющие провалить уровень в одном прыжке от финиша.
После изменений «поплыли» коэффициенты очков. Т.к. они рассчитываются с учетом времени прохождения, то за первые уровни начислялось больше, чем за последние.
Чтобы выправить баланс пришлось пройти игру десятки раз. И все равно создать линейное возрастание сложности не удалось.
И напоследок массу эмоций доставило создание иконки. Все уперлось в неумение рисовать и незнание того, какими они вообще должны быть. В итоге получилось чудо переполненное фотошопными «артефактами». Не самый лучший вариант, но на большее не хватила сил. Просто не ожидал, что это окажется нетривиальной задачей.
После того, как были сделаны первые шаги и запущен первый уровень, я составил список того, что нужно добавить в игру перед тем, как ее выпускать. Список получился длинным.
Первые же пункты показали, что если делать всё, то игра выйдет месяца через три-четыре. Учитывая, что все делалось на энтузиазме – не вариант. Я прекрасно понимал, что чем дольше будет длиться разработка, чем больше будет возникать «затыков», тем меньше шансов, что я вообще что-то сделаю. Разработка должна была пройти быстро, на одном запале. Фактически – в один спринт, если бы речь шла о скраме.
В итоге было решено игру ужать.
От чего отказался:
Это только те пункты, которые были записаны и о которых я реально жалею. Общее количество нереализованных «хотелок» не перечесть.
Win!
Для себя я сделал несколько выводов, которыми с радостью поделюсь.
И последние, совсем личные впечатления.
Делать игру – это интересно. Иногда даже более интересно, чем играть в нее. В отличии от работы в команде над крупным проектом это дает маленькую радость личной победы. Выпуск продукта на работе – это норма, там все понятно, в этом не ничего необычного. А вот такие мини-игры позволяют пережить ту радость, которую мы испытывали при запуске наших первых программ. Когда вокруг ворох неизвестных технологий, все новое, непонятное, а тут: О-па! Оно заработало!
Впечатления от разработки остались самые приятные. Так что — Play game!
Буду рад, если кто-нибудь поделится своим опытом «непрофессиональной» разработки игр.
Краткая предыстория
Некоторое время назад у меня возникла идея: «А не написать ли компьютерную игру?» Думаю, что такая мысль приходит почти к любому программисту. Все мы, когда только начинаем изучать профессию, грезим созданием новых World Of Warcraft’ов, Counter Strike’ов или, как минимум, «Веселых ферм». Но потом школьно-студенческие годы заканчиваются и мы начинаем писать то, за что платят.
Первую и единственную свою игру я написал на Delphi лет десять назад, когда только изучал программирование. Это был убогий клон вертикальных слайдеров-стрелялок, который дико глючил и тормозил. Я понял, что для разработки чего-то путного нужно не только желание, но и немалые знания в области работы с графикой, и что при разработке «интересное программирование» займет десять процентов времени, а остальное уйдет на решение совсем не романтических технических проблем. Поэтому идею написания игр я забросил еще до ВУЗа и на сегодняшний день уже пять лет счастливо работаю в области интеграции корпоративных систем.
Однако, пару месяцев назад мне захотелось написать что-нибудь «для души». К тому же стремительно развитие мобильных приложений вызывает ощущение, что рядом происходит что-то очень интересное, но без меня. «Не порядок!» — решил я и кинулся копать в сторону разработки мобильных игрушек.
И вот тут начинается самое интересное…
Во-первых, очень радует обилие различных готовых движков. Причем бесплатных и простых в освоении.
Во-вторых, куча маркетов и сайтов с приложениями, где можно честно делиться своими трудами.
В-третьих – множество статей, уроков, туториалов и т.д. и т.п. Одних статей на Хабре вполне хватает, чтобы получить представление о технологиях и инструментах.
Так что решение было однозначным – делать!
А что делать?
Первые четыре-пять идей-прототипов были безжалостно выкинуты или отложены до лучших времен.
Причины самые разные: некоторые были слишком сложными в разработке, некоторые оказывались плохими клонами существующих продуктов, некоторые банально требовали большого объема работы по созданию контента.
Тогда я сел и решил сформулировать требования к будущей игре.
- Она должна обладать ярким и приятным интерфейсом. Времена плохо прорисованных flash игр давно прошли, если когда-то вообще наступали.
- Игра должна обладать простым геймплеем. Это было продиктовано ограниченностью ресурсов – писать что-то серьезное не было ни сил, ни времени. К тому же корреляция между сложностью игры и ее популярностью весьма сомнительна. Привет злым птичкам!
- Управление должно быть максимально простым. Это мой личный взгляд на мобильные игры. Терпеть не могу те, где нужно тыкать пальцами по десятку маленьких экранных кнопок, либо крутить телефон как руль. Просто личные предпочтения.
В итоге остановился на следующей концепции: Мяч прыгает по платформам. Задача – «допрыгать» до финиша и не упасть. Управление – одним пальцем. Коснулся, потянул, отпустил. Никаких кнопок или других элементов управления, кроме меню.
В качестве движка был выбран Unity3d. Во-первых, по нему много информации, во-вторых, с 3d я дружу гораздо лучше, чем с 2d. Сделать простенькие модельки и собрать из них уровни показалось куда проще, чем пытаться нарисовать «кривыми» руками красивые спрайты.
Итак, цель ясна, поехали!
Первые проблемы
Первое, чего не хватало – контент. Даже самая проста игра – это не только функции и классы, но и модели, текстуры, звуки. Программисты редко бывают художниками. Музыкантами – еще реже. А и тем, и другим, и третьим – почти никогда.
Контент нужно было либо искать на стоках, либо заказывать у специалистов, либо делать самому. Платные стоки и индивидуальный заказ отпали сразу – речь шла не о коммерческом приложении, и вкладывать в него деньги не было смысла. На бесплатных стоках найти что-то путное не получалось – процесс поиска напоминал копание в большой урне, куда выбросили все, что было под рукой.
Остался последний вариант – делать все самому. В итоге от чего-то пришлось отказаться, как, например, от фоновой музыки. Зато я получил массу удовольствия от изучения 3d инструментов. Самым крутым оказался 3d Studio Max. Жаль, что время его тестового использования ограничено одним месяцем. Если вдруг займусь этой областью профессионально – обязательно куплю. А так вполне выручает бесплатный Blender.
Со звуками тоже оказалось не сложно – несколько коротких звуковых эффектов на падение мяча, «сбор» звездочек и завершение уровня были сделаны с помощью бесплатного Audacity. Можно было сделать и больше и лучше, но тут проблема не в инструменте, а в навыках.
Второй проблемой стала архитектура приложения. Описать классы и их назначение – это не беда, а вот склеить их как-то с Unity, который я на момент начала разработки открыл в первый раз – гораздо сложнее. Как собрать весь этот зоопарк в кучу, когда возможности инструмента узнаешь по ходу разработки? Переписать все с начала и по-человечески хотелось через каждые несколько часов разработки. Постоянно узнавал что-то новое и старое решение казалось идиотским.
Очень быстро пришло осознание того, что если гнаться за качеством кода, то игра не будет сделана никогда. В итоге продумывались только те моменты, которые реально влияли на разработку и использовались во многих местах – десяток префабов с подвешенными на них скриптами-контроллерами. Остальное – хардкод и анархия.
Кажется, что я использовал все антипаттерны, которые только есть – хардкод, копипастинг и т.д. Ни в коем случае не призываю так делать, но не могу не обратить внимание на то, что это позволило сократить время разработки раза в три. На выходе – работающая игра и отвратительный код, который никто никогда не увидит.
Еще одной бедой игр, о которой я никогда не задумывался оказался баланс. Даже в моей мини-игре сложность уровней должна была постепенно возрастать. Причем не только размер, а именно сложность. Пропорционально должны были возрастать начисляемые за прохождение очки.
Первый вариант игры оказался мега-хардкорным, хотя я его проходил без проблем и думал, что все в порядке. Но «альфа-тестирование» с помощью близких людей показало, что игра непроходима если не ты сам ее писал.
Пришлось многое упрощать, оптимизировать, добавлять «страховочные» элементы, не позволяющие провалить уровень в одном прыжке от финиша.
После изменений «поплыли» коэффициенты очков. Т.к. они рассчитываются с учетом времени прохождения, то за первые уровни начислялось больше, чем за последние.
Чтобы выправить баланс пришлось пройти игру десятки раз. И все равно создать линейное возрастание сложности не удалось.
И напоследок массу эмоций доставило создание иконки. Все уперлось в неумение рисовать и незнание того, какими они вообще должны быть. В итоге получилось чудо переполненное фотошопными «артефактами». Не самый лучший вариант, но на большее не хватила сил. Просто не ожидал, что это окажется нетривиальной задачей.
Доработка напильником
После того, как были сделаны первые шаги и запущен первый уровень, я составил список того, что нужно добавить в игру перед тем, как ее выпускать. Список получился длинным.
Первые же пункты показали, что если делать всё, то игра выйдет месяца через три-четыре. Учитывая, что все делалось на энтузиазме – не вариант. Я прекрасно понимал, что чем дольше будет длиться разработка, чем больше будет возникать «затыков», тем меньше шансов, что я вообще что-то сделаю. Разработка должна была пройти быстро, на одном запале. Фактически – в один спринт, если бы речь шла о скраме.
В итоге было решено игру ужать.
От чего отказался:
- Фоновая музыка. Найти хорошую и бесплатную не удалось, писать свою не умею, покупать чужую – не вариант. А воровать – не хорошо и аморально.
- Количество уровней сократилось с 25 до 15.
- Вместо многослойного задника с эффектом перспективы были вставлены абстрактные облачка.
- Не реализована интеграция с социальными сетями. Очень хотелось сделать страницу в facebook и хотя бы кнопку Like в самом приложении, но не хватило времени.
- Глобальный рейтинг. Планировал показывать не только достижения самого игрока, но и лучшие среди все и лучшие среди его друзей в facebook. Аналогично, времени не хватило.
- Реклама в приложении. Хотелось чуть-чуть компенсировать себе деньгами потраченное время. Но возникли проблемы с admob, и встал вопрос – либо ничего не заработать, либо сильно затянуть выпуск. Решил, что уж лучше выпустить совсем бесплатно, а себя наградить полученным опытом.
Это только те пункты, которые были записаны и о которых я реально жалею. Общее количество нереализованных «хотелок» не перечесть.
Итоги
- Игра выпущена и опубликована в Google Play.
- Продолжительность разработки от идеи до релиза – чуть больше 2-х месяцев.
- Время потраченное на разработку – около 60 часов. Очень примерно, т.к. бОльшая часть времени ушла на изучение неизвестных ранее технологий. А еще на тестирование и выравнивание баланса.
- Денежная стоимость разработки – 25 долларов за аккаунт разработчика в Google Play.
Win!
Выводы
Для себя я сделал несколько выводов, которыми с радостью поделюсь.
- Современная разработка мобильных мини-игр – это больше работа художника, чем программиста. Для программной реализации достаточно самых базовых представления о разработке. Конечно, если делается большой и качественный продукт с коммерческой целью – все совсем по-другому. Но написать казуальную стрелялку-бродилку-леталку-прыгалку сейчас не представляет никакой проблемы. Было бы желание.
- Идеал недостижим. Если стремиться вложить в свою первую игру все, что хочется, то она никогда не будет сделана. Лучше сделать что-то простое и приятное, чем ничего.
- Не нужно бояться нарушить правила разработки. «Грязный» код – это, конечно, плохо. Но пользователь его никогда не увидит. И вы тоже, если не собираетесь развивать вашу игру. А делать что-то в первый раз и надеяться на развитие – это наивно. Код небольшой игры легко держать в голове и вполне можно пренебречь его чистотой, если это ускорит выход.
- Лучшая мотивация – скорый релиз. Если он переносится на неопределенный срок из-за каких-то проблем, то желание что-то делать тает на глазах. Поэтому все «тормозящие» проблемы нужно решать как можно быстрее. Идеальный инструмент для самомотивации – лист бумаги на который выписано все, что нужно сделать для релиза. Если что-то оказывается слишком сложным и необязательным – оно вычеркивается и больше к нему не следует возвращаться.
- Первая игра должна быть такой, в какую самому хотелось бы сыграть. Вряд ли она «выстрелит» и взорвет рейтинги магазинов приложений. Но ее будет приятно разрабатывать и ею захочется поделиться с окружающими. А для хобби это самое главное.
И последние, совсем личные впечатления.
Делать игру – это интересно. Иногда даже более интересно, чем играть в нее. В отличии от работы в команде над крупным проектом это дает маленькую радость личной победы. Выпуск продукта на работе – это норма, там все понятно, в этом не ничего необычного. А вот такие мини-игры позволяют пережить ту радость, которую мы испытывали при запуске наших первых программ. Когда вокруг ворох неизвестных технологий, все новое, непонятное, а тут: О-па! Оно заработало!
Впечатления от разработки остались самые приятные. Так что — Play game!
Буду рад, если кто-нибудь поделится своим опытом «непрофессиональной» разработки игр.