litebox

На Пикабу
поставил 6 плюсов и 1 минус
Награды:
5 лет на Пикабу
411 рейтинг 4 подписчика 1 подписка 3 поста 1 в горячем

Как издать мобильную игру, и не совершить моих ошибок

Всем привет.


Хочу поделится своей историей запуска мобильной игры. Это история о сотрудничестве с издателем, в которой я хочу рассказать о подводных камнях, подстерегающих инди-разработчика во время работы с последним.


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


История моей игры началась в 2015 - я пересел на Unity и увлекся 3d, результатом этого стала моя первая (вторая, которую не стыдно показать) игра: Out of Brakes - раннер, в котором игрок должен уходить от препятствий на машинке, скорость движения которой постоянно растет:

Как издать мобильную игру, и не совершить моих ошибок Игры, История, Издательство, Телефон, Publisher, Unity3D, Инди, Indiedev, Видео, Длиннопост

Работа заняла без малого год. Затем были непродолжительные муки запуска: я решил, что написал классную игру (убийца Crossy Road и все такое), что издатель мне не нужен, и что игру расхватают как горячие пирожки, как только она окажется в AppStore… Что-же, это был хороший опыт: самостоятельный запуск можно сравнить с бросанием камней в штормящий океан, в надежде увидеть круги на воде. Этот опыт стал очень важным, и научил мыслить более реалистично: мы часто слышим об историях успеха, и нам кажется, что мы с легкостью можем их повторить, упуская из виду множество деталей и сложностей, с которыми сталкивались те самые успешные разработчики, фокусируя внимание на одном - на успехе.


Итак, утерев слезы и проанализировав ситуацию, я понял 3 вещи:

1. один в поле не воин: делать игру в одно лицо, пробуя себя в разных ролях - это весело, но не слишком продуктивно

2. нужен издатель: он может объективно оценить игру, дать советы по ее улучшению, а также построить маркетинговую кампанию и повысить шанс на фичеринг в AppStore / Google Play

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


Приняв во внимание все вышеперечисленное, была разработана игра Blocky Racing:

Над Blocky Racing уже работало два человека, игра базировалась на идеях и графике Out of Brakes - это позволило сфокусироваться на геймплее, и развить раннер в полноценные гонки с треками, противниками и прокачкой машинки. По завершении разработки мы начали искать издателя.


И вот он, триумф инди-разработчика: после кучи отправленных пресс-релизов, переговоров и отказов, издатель найден, контракт подписан, игра запущена и даже получила фичеринг в AppStore - радости нет предела. Но, как оказалась, впереди нас ждала огромная ложка дегтя.


Первая проблема, с которой мы столкнулись - это медленная работа с издателем: контракт был подписан в Ноябре 2016, а игру мы запустили только в Январе 2018 - конечно, в игру был внесен ряд изменений, но общий ритм доработок оставлял желать лучшего - думаю, этот момент стоит учитывать всем разработчикам - в нашем случае между подписанием и запуском прошел целый год!


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


С нетерпением ждали, когда пройдут 2 месяца с момента запуска, и издатель пришлет нам первый отчет о доходах/расходах, и мы сможем получить наш первый чек. И вот тут началось самое интересное: издатель начал затягивать с отчетами. Сначала он писал, что еще не собраны данные по рекламным сетям, потом - что он на игровой конференции и ему некогда, затем - что занят запуском другой игры и т.д. и т.п. В то же время активно продолжалась работа над патчами: “куй железо, пока горячо” - говорил издатель… мы очнулись только в августе 2018 - пришло осознание того, что нас дурачат. Стало понятно, что нам нужна помощь.


Мы нашли юриста, который прочел контракт и пришел в ужас: в контракте не было ни единого пункта, защищающего права разработчика, и напротив: права издателя были защищены на 100%, а обязательства и условия их невыполнения со стороны издателя были или очень не точны или отсутствовали вовсе.


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


Началась работа над новым патчем: мы меняли название с Blocky Racing на Blocks Racing, а издатель уверял нас, что вот-вот посчитает все доходы, пришлет нам все отчеты и выплатит все деньги, и в знак доброй воли выдал нам аванс - $4к. Развесив уши мы выдали патч, после чего издатель еще какое-то время выходил с нами на связь, а в декабре 2018 даже написал, цитата:


“I’ve missed the few deadline that I've set and given you. Can you give me one more weekend to address it? Otherwise we will terminate the contract and in turn you are free to republish it (you will still be entitled to the money owed to you). hope that's a fair self declared ultimatum”


Конечно же, прошла неделя, месяц - никаких действий со стороны издателя не последовало, и он перестал с нами контактировать.


Из этой истории можно вынести несколько уроков:

1. Составление условий контракта с юристом - обязательно - это поможет избежать многих проблем

2. Желательно обсудить доработки, которые потребуются внести в игру перед запуском, и зафиксировать сроки запуска в контракте - во время устного обсуждения издатель обещал нам, что мы запустимся через 2-3 месяца, а в реальности ушел целый год, большую часть из которого заняло ожидание обратной связи

3. Быстрее реагировать, не работать “по инерции”, если заподозрили, что есть проблема - не сидеть сложа руки

4. Не стоит думать, что за рубежом все работают по чести и совести - кидалово есть везде (скорее всего, Вы так и не думаете, но автор статьи наивно предполагал, что IT-бизнес лишен этого недостатка)


Итак, прошло больше года с момента запуска игры. Игра давно не обновляется, ежемесячный доход упал до $1.5к в месяц.


Был период апатии, когда мне казалось, что нужно смирится с поражением, и двигаться дальше: заниматься любимым делом, делать новые игры и более серьезно подходить к выбору издателя в следующий раз. Общий доход от игры, опираясь на данные из App Annie, примерно $50к. Это не тот порядок цифр, из-за которого стоит идти в суд.


Но, в какой-то момент пришло осознание, что это МОЯ игра, МОЙ интеллектуальный труд, и МОЕ потраченное время, и за это стоит бороться.


Я хочу добиться следующего:

1. Чтобы издатель убрал игру из магазинов и перестал наживаться за мой счет

2. Чтобы издатель выплатил доход, который принадлежит нам по праву.

3. Донести до общественности последствия моего сотрудничества издателем.


На сегодняшний день стратегия действий, разработанная юристом, следующая:

1. Отправить письмо-претензию издателю: мы уведомляем его, что он грубо нарушает контракт, и если он не выполнит свои обязательства в течении месяца, мы разрываем контракт в одностороннем порядке

2. Если издатель игнорирует претензию, разорвать контракт и уведомить издателя об этом

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


Первые 2 пункта плана уже выполнены и не принесли результата. Я не знаю, стоит ли игра свеч, не знаю, хватит ли мне денег на ведение суда в США. И даже если суд обяжет издателя выплатить мне деньги - как он сможет повлиять на издателя из Малайзии - мне тоже не известно.


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

Показать полностью 1 1

Trial Park: Дневник разработчика

Привет, Пикабу


В марте стартовал игровой джем #GamesJam #GamesJamKanobu - нужно за месяц написать игру, используя физику. Моя цель - оценить перспективность своей идеи, а также поделится своими знаниями в разработке.


Если Вы начаниющий разработчик, думаю, этот пост будет Вам интересен.


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

Trial Park: Дневник разработчика Телефон, Android, iOS, Игры, Разработка, Раннер, Тир, Длиннопост

Технические подробности: Игра пишется на Unity3d, с использованием 2d-физики. Разработкой прототипа занимаюсь один: программная часть и геймплей лежат на мне, графические заготовки беру в интернете рисую сам. Если прототип вызовет интерес и разовьется в полноценную техно-демку, к проекту подключится дизайнер и придаст игре ту самую изюминку, которой сейчас не хватает на скриншоте:

Trial Park: Дневник разработчика Телефон, Android, iOS, Игры, Разработка, Раннер, Тир, Длиннопост

Игра опирается на физику 2d потому, что она требует меньше вычислительных ресурсов, и позволяет заполнить пространство уровня намного плотнее, чем в 3d. Игра ориентирована на мобильные платформы, так что - это актуальная проблема. Визуально же, игра может быть реализована в полном 2d, или же использовать 3d модели - на данном этапе для меня это не важно.


Игровой процесс разделяется на волны, в которых игрок должен отражать нападения разных врагов. В какой-то мере, игра является endless runner'ом. С технической точки зрения это значит, что все игровые ресурсы стоит использовать многократно, иначе рано или поздно игра начнет притормаживать - это начнет работать сборщик мусора. В игре с постоянным и равномерным движением эти рывки буду особенно заметны, поэтому в основе всего лежит шаблон - пул объектов (Object Pool).


Пул объектов - это таблица списков, на C# она выглядит так: Dictionary < string, List< GameObject > >. В начале игры, мы заполняем эту таблицу идентификаторами объектов, которые нам нужны, и инициализируем списки экземплярами префабов - кол-во создаваемых объектов меняется в зависимости от того, как часто используется объект, например, мы добавляем 32 монетки "Coin", и всего лишь 4 яйца "Egg" - т.к. одновременно игроку может выпасть много монеток, но всего несколько яиц с динозавром. Еще один момент, на который стоит обратить внимание при использовании пула объектов - это на то, что объект всегда должен выходить из пула "чистым", в состоянии "по умолчанию" - иногда это самое сложное и чревато багами. Самый просто пример: все объекты в игре физические, и когда объект возвращается в пул, мы должны сбросить его скорости вращения / перемещения, иначе при повторном использовании он "выпрыгнет" помня о старых скоростях, что нам совсем не нужно, это выглядит так:


protected virtual void OnDisable()

{

_rigidbody.velocity = Vector2.zero;

_rigidbody.angularVelocity = 0.0f;

}


Конечно же, чем сложнее объект и чем больше состояний он имеет, тем сложнее его вернуть в состояние "по умолчанию".


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

Trial Park: Дневник разработчика Телефон, Android, iOS, Игры, Разработка, Раннер, Тир, Длиннопост

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

Trial Park: Дневник разработчика Телефон, Android, iOS, Игры, Разработка, Раннер, Тир, Длиннопост

Для самых стойких, кто долистал дочитал до конца, ссылка на страницу GamesJam:

http://gamesjam.org/3162/ (тут можно поиграть в актуальную версию)


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


В следующей версии, я планирую добавить:

- "многоходовый" мега-босс - механический крокодил, вместо зубов у него будут ракеты, а из глотки буду вырываться бочки с горючим

- систему бустеров для игрока - пополнение энергии, временное усиление огневой мощи, вместимости рожка для патронов и т.д.

- систему анти-бустеров для врагов - замедление, взрыв бомбы и т.д.


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


Спасибо за внимание и успехов в разработке :)

Показать полностью 4

Воксельный редактор машинок для Out of Brakes

Всем привет,


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

Воксельный редактор машинок для Out of Brakes Гонки, Редактор, Voxelart, Android, iOS, Разработка, Раннер, Длиннопост
Воксельный редактор машинок для Out of Brakes Гонки, Редактор, Voxelart, Android, iOS, Разработка, Раннер, Длиннопост

Игра сделана на Unity3d.

Воксельный редактор машинок для Out of Brakes Гонки, Редактор, Voxelart, Android, iOS, Разработка, Раннер, Длиннопост
Воксельный редактор машинок для Out of Brakes Гонки, Редактор, Voxelart, Android, iOS, Разработка, Раннер, Длиннопост

В игре есть набор готовых машинок, которые можно открывать за монетки - удивительно свежая механика :)

Теперь в игре есть и встроенный редактор, который позволяет создавать свои собственные транспортные шедевры.

Воксельный редактор машинок для Out of Brakes Гонки, Редактор, Voxelart, Android, iOS, Разработка, Раннер, Длиннопост
Воксельный редактор машинок для Out of Brakes Гонки, Редактор, Voxelart, Android, iOS, Разработка, Раннер, Длиннопост

Также в игре реализована система сбора лута (то бишь новых запчастей для редактора) - когда я только начал делать редактор, я видел два варианта реализации:

1. дать игроку бесконечный набор кубиков/колесиков/фигурок,

2. ограничить их кол-во и дать игроку возможность собирать новые


Второй вариант мне показался куда интереснее, т.к. добавляет в игру еще одну механику.

Показать полностью 5
Отличная работа, все прочитано!