- PVSM.RU - https://www.pvsm.ru -
Работая в программистом в области никак не связанной с играми я вдруг решил написать мобильную игру. Не зная ни инструментов, ни технологий и специфики разработки. Какой она получилась? Какие выводы я для себя сделал и может ли геймдев быть хобби – всё под катом.
Некоторое время назад у меня возникла идея: «А не написать ли компьютерную игру?» Думаю, что такая мысль приходит почти к любому программисту. Все мы, когда только начинаем изучать профессию, грезим созданием новых World Of Warcraft’ов, Counter Strike’ов или, как минимум, «Веселых ферм». Но потом школьно-студенческие годы заканчиваются и мы начинаем писать то, за что платят.
Первую и единственную свою игру я написал на Delphi лет десять назад, когда только изучал программирование. Это был убогий клон вертикальных слайдеров-стрелялок, который дико глючил и тормозил. Я понял, что для разработки чего-то путного нужно не только желание, но и немалые знания в области работы с графикой, и что при разработке «интересное программирование» займет десять процентов времени, а остальное уйдет на решение совсем не романтических технических проблем. Поэтому идею написания игр я забросил еще до ВУЗа и на сегодняшний день уже пять лет счастливо работаю в области интеграции корпоративных систем.
Однако, пару месяцев назад мне захотелось написать что-нибудь «для души». К тому же стремительно развитие мобильных приложений вызывает ощущение, что рядом происходит что-то очень интересное, но без меня. «Не порядок!» — решил я и кинулся копать в сторону разработки мобильных игрушек.
И вот тут начинается самое интересное…
Во-первых, очень радует обилие различных готовых движков. Причем бесплатных и простых в освоении.
Во-вторых, куча маркетов и сайтов с приложениями, где можно честно делиться своими трудами.
В-третьих – множество статей, уроков, туториалов и т.д. и т.п. Одних статей на Хабре вполне хватает, чтобы получить представление о технологиях и инструментах.
Так что решение было однозначным – делать!
Первые четыре-пять идей-прототипов были безжалостно выкинуты или отложены до лучших времен.
Причины самые разные: некоторые были слишком сложными в разработке, некоторые оказывались плохими клонами существующих продуктов, некоторые банально требовали большого объема работы по созданию контента.
Тогда я сел и решил сформулировать требования к будущей игре.
В итоге остановился на следующей концепции: Мяч прыгает по платформам. Задача – «допрыгать» до финиша и не упасть. Управление – одним пальцем. Коснулся, потянул, отпустил. Никаких кнопок или других элементов управления, кроме меню.
В качестве движка был выбран Unity3d. Во-первых, по нему много информации, во-вторых, с 3d я дружу гораздо лучше, чем с 2d. Сделать простенькие модельки и собрать из них уровни показалось куда проще, чем пытаться нарисовать «кривыми» руками красивые спрайты.
Итак, цель ясна, поехали!

Первое, чего не хватало – контент. Даже самая проста игра – это не только функции и классы, но и модели, текстуры, звуки. Программисты редко бывают художниками. Музыкантами – еще реже. А и тем, и другим, и третьим – почти никогда.
Контент нужно было либо искать на стоках, либо заказывать у специалистов, либо делать самому. Платные стоки и индивидуальный заказ отпали сразу – речь шла не о коммерческом приложении, и вкладывать в него деньги не было смысла. На бесплатных стоках найти что-то путное не получалось – процесс поиска напоминал копание в большой урне, куда выбросили все, что было под рукой.
Остался последний вариант – делать все самому. В итоге от чего-то пришлось отказаться, как, например, от фоновой музыки. Зато я получил массу удовольствия от изучения 3d инструментов. Самым крутым оказался 3d Studio Max. Жаль, что время его тестового использования ограничено одним месяцем. Если вдруг займусь этой областью профессионально – обязательно куплю. А так вполне выручает бесплатный Blender.
Со звуками тоже оказалось не сложно – несколько коротких звуковых эффектов на падение мяча, «сбор» звездочек и завершение уровня были сделаны с помощью бесплатного Audacity. Можно было сделать и больше и лучше, но тут проблема не в инструменте, а в навыках.
Второй проблемой стала архитектура приложения. Описать классы и их назначение – это не беда, а вот склеить их как-то с Unity, который я на момент начала разработки открыл в первый раз – гораздо сложнее. Как собрать весь этот зоопарк в кучу, когда возможности инструмента узнаешь по ходу разработки? Переписать все с начала и по-человечески хотелось через каждые несколько часов разработки. Постоянно узнавал что-то новое и старое решение казалось идиотским.
Очень быстро пришло осознание того, что если гнаться за качеством кода, то игра не будет сделана никогда. В итоге продумывались только те моменты, которые реально влияли на разработку и использовались во многих местах – десяток префабов с подвешенными на них скриптами-контроллерами. Остальное – хардкод и анархия.
Кажется, что я использовал все антипаттерны, которые только есть – хардкод, копипастинг и т.д. Ни в коем случае не призываю так делать, но не могу не обратить внимание на то, что это позволило сократить время разработки раза в три. На выходе – работающая игра и отвратительный код, который никто никогда не увидит.
Еще одной бедой игр, о которой я никогда не задумывался оказался баланс. Даже в моей мини-игре сложность уровней должна была постепенно возрастать. Причем не только размер, а именно сложность. Пропорционально должны были возрастать начисляемые за прохождение очки.
Первый вариант игры оказался мега-хардкорным, хотя я его проходил без проблем и думал, что все в порядке. Но «альфа-тестирование» с помощью близких людей показало, что игра непроходима если не ты сам ее писал.
Пришлось многое упрощать, оптимизировать, добавлять «страховочные» элементы, не позволяющие провалить уровень в одном прыжке от финиша.
После изменений «поплыли» коэффициенты очков. Т.к. они рассчитываются с учетом времени прохождения, то за первые уровни начислялось больше, чем за последние.
Чтобы выправить баланс пришлось пройти игру десятки раз. И все равно создать линейное возрастание сложности не удалось.
И напоследок массу эмоций доставило создание иконки. Все уперлось в неумение рисовать и незнание того, какими они вообще должны быть. В итоге получилось чудо переполненное фотошопными «артефактами». Не самый лучший вариант, но на большее не хватила сил. Просто не ожидал, что это окажется нетривиальной задачей.

После того, как были сделаны первые шаги и запущен первый уровень, я составил список того, что нужно добавить в игру перед тем, как ее выпускать. Список получился длинным.
Первые же пункты показали, что если делать всё, то игра выйдет месяца через три-четыре. Учитывая, что все делалось на энтузиазме – не вариант. Я прекрасно понимал, что чем дольше будет длиться разработка, чем больше будет возникать «затыков», тем меньше шансов, что я вообще что-то сделаю. Разработка должна была пройти быстро, на одном запале. Фактически – в один спринт, если бы речь шла о скраме.
В итоге было решено игру ужать.
От чего отказался:
Это только те пункты, которые были записаны и о которых я реально жалею. Общее количество нереализованных «хотелок» не перечесть.
Win!

Для себя я сделал несколько выводов, которыми с радостью поделюсь.
И последние, совсем личные впечатления.
Делать игру – это интересно. Иногда даже более интересно, чем играть в нее. В отличии от работы в команде над крупным проектом это дает маленькую радость личной победы. Выпуск продукта на работе – это норма, там все понятно, в этом не ничего необычного. А вот такие мини-игры позволяют пережить ту радость, которую мы испытывали при запуске наших первых программ. Когда вокруг ворох неизвестных технологий, все новое, непонятное, а тут: О-па! Оно заработало!
Впечатления от разработки остались самые приятные. Так что — Play game!

Буду рад, если кто-нибудь поделится своим опытом «непрофессиональной» разработки игр.
Автор: VlaZ
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/49759
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/204494/
Нажмите здесь для печати.