Оффтоп Dmitriy Grigorenko
214

5 трудностей реализации игровых проектов на примере “Rocket X — Галактический шутер”

Два года назад мы решили развивать внутри компании игровое направление. S Media Link — аутсорсинговая компания, которая занимается заказной мобильной и web разработкой, поэтому нам было крайне сложно придумать стоящий проект. У меня уже есть опыт создания мобильной игры Карл — король жуков (King of Bugs). Игра была зафичерина на главной Appstore и получила неплохой отклик на конференции DevGAMM. Однако создание мобильной игры — это огромные финансовые и временные ресурсы, из-за чего новый проект приходилось откладывать до недавнего времени. Сейчас наша космическая аркада “Rocket X — Галактический шутер” находится на этапе тестирования и проверок игровых механик и гипотез. Она уже вышла на рынок, а с недавних пор доступна и в России. Мы попали в подборки Аркады и Приключения в Appstore. Этот небольшой, но мотивирующий успех дался нам огромными усилиями, чередой ошибок и трудностей, о которых расскажем ниже.

В закладки

Трудность №1 — Выбрать ответственного

Изначально мы определили, что задачи будут звучать так:

1. Научиться создавать собственные продукты и доводить их до релиза.

2. Научить и подготовить команду разработчиков, художников и других специалистов в геймдеве.

3. Самостоятельно пройти все этапы, касающиеся продвижения мобильных продуктов на рынке СНГ и дальнего зарубежья.

4. Научиться продвигать мобильные игры.

5. Вернуть вложенные инвестиции и вывести в плюс проект.

Так как ранее, в случае с King of Bugs, мы подключали к проекту издателя, эти аспекты геймдева так и остались для нас темным лесом. С Rocket X нужно было делать все самим. Игра позиционировалась как инди-проект. И в соответствии с законами жанра, ее команда была небольшой (два постоянных участника), но крайне мотивированной. На наш совместный с другими учредителями компании клич о поиске желающих заняться игровым направлением откликнулся один из разработчиков. У Макса был опыт в геймдеве, а также огромное желание делать игру на Unity. Он настоял на том, что будет выступать и в роли разработчика, и в роли руководителя проекта. Макс взял всю ответственность на себя, тогда как я был в роли консультанта. И здесь мы допустили первую ошибку. Уже через 2 месяца он сообщил, что больше не может разрываться на два направления и решил полностью уйти в разработку в проекте “Rocket X — Галактический шутер”.

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

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

Трудность №2 — Собрать команду

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

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

Трудность №3 — Вовремя отцепить звездолова

Внутри инди-проектов особенно сложно удержать взаимоотношения между участниками команды на том уровне, который бы способствовал максимальной продуктивности рабочего процесса. Так получается, что находятся люди, готовые надеть себе на голову если не корону, то шляпу с перьями, провозгласив себя д’Артаньяном, который может то, чего не может никто. Глобально, “д’Артаньян” конечно ошибается, но в рамках маленького коллектива это приводит к тому, что проект разваливается. Прав он или нет — уже не важно. В случае с Рокетом нам удалось избежать подобной ситуации. Во многом благодаря тому, что отношения в коллективе были строго регламентированы — все мы сотрудники одной компании, со своими должностями и со всеми вытекающими. Говорю об этом, потому что с головой окунулся в подобные истории на своем предыдущем проекте. С Rocket X мы этого не допустили.

Трудность №4 — Научить ладить дизайнера с Unity

Разработка арта для игры — это не просто иллюстрация. Здесь мало красиво нарисовать. Необходимо знать огромное количество технических моментов, требования к графике. При разработке дизайна игры мы использовали ресурсы компании. Очень многое приходилось изучать в процессе — путем проб и ошибок, поисков знаний в сети. В рисовании арта для игр действительно частенько нужно хитрить в том, как объединить слои, чтобы избавиться от ненужной прозрачности, которая создаёт лишний вес приложения, как сделать ту или иную анимацию маленьким количеством кадров или совсем заменить ее на ту, которую может сделать движок самостоятельно. Именно из-за технических особенностей нужно уметь держать баланс между красотой и весом картинки, количеством слоев и объектов на одном экране и, в общем, хитрить разными способами, чтобы все мобильные устройства могли беспроблемно воспроизводить игру, а она при этом оставалась красочной и имела большое количество объектов и эффектов. Труднее всего было нарисовать картинку, полностью соответствующую техническим особенностям игрового движка, не потерять общий стиль, красоту и живость изображения.

Геймплей Rocket X в режиме шутер

Трудность №5 — Впихнуть невпихуемое

Этот пункт — скорее совет. Косвенно он является продолжением предыдущего. Возможно это не очевидный и не критичный момент, но очень желательно, чтобы билд весил не более 100 мб. Если он превышает данный объем, то игру будет невозможно загрузить через мобильные сети. Результат — теряем пользователей. Необходимо помнить об этом на протяжении всего проекта. Мы потеряли много времени на оптимизацию графики, чтобы уложиться в заданные параметры. Разумеется, мы помним про подгрузку ресурсов с серверов CDN. Но это дополнительное звено, которое иногда дает сбой, в результате чего получаем возмущенных игроков, баги и, как следствие, потерю интереса. На данном этапе развития проекта мы не хотим перегружать игру дополнительными звеньями и проблемами.

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

#игры #gamedev #инди_игры

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Dmitriy Grigorenko", "author_type": "self", "tags": ["\u0438\u043d\u0434\u0438_\u0438\u0433\u0440\u044b","\u0438\u0433\u0440\u044b","gamedev"], "comments": 4, "likes": 7, "favorites": 4, "is_advertisement": false, "subsite_label": "flood", "id": 44830, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15395' + '50799') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 44830, "author_id": 137687, "diff_limit": 1000, "urls": {"diff":"\/comments\/44830\/get","add":"\/comments\/44830\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/44830"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

4 комментария 4 комм.

Популярные

По порядку

1

Были проблемы с публикацией

Ответить
0

Хороший кейс. Что больше всего тормозило разработку?

Ответить
0

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

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Голосовой помощник выкупил
компанию-создателя
Подписаться на push-уведомления