Вместе с Unity AD публикует истории разработки игровых проектов, созданных на базе популярной технологии. Расскажите о своём кейсе, чтобы попасть в рубрику.
Сегодня в Unity — рассказ ведущего разработчика студии LaikaBOSS Games о процессе создания гоночного раннера Traffic Nation.
Мы любим гонки. Мы смотрим гонки, мы играем в гонки, следим за обзорами новых автомобилей. Даже на столе с незапамятных времен постоянно стоят модели игрушечных гоночных автомобилей. И, конечно же, делаем про гонки игры.
Всё началось примерно полтора года тому назад. У нас была сформированная команда из трёх человек, был успешный опыт разработки на Unity. Мы тогда закончили разработку игры Road Smash (на эту тему был
доклад-постмортем на конференции DevGAMM) и думали, что же делать дальше. Вопрос выбора технологии не стоял — Unity был, и на данный момент остаётся самым лучшим игровым движком в отношении скорости разработки к качеству.
В топах гонок Google Play и App Store был
Traffic Racer и такие мастодонты, как Asphalt и Need for Speed. Наш прошлый опыт показал, что надо делать простые «залипательные» игры — пользователям это нравится. Поэтому мы решили сделать бесконечный раннер по аналогии с Traffic Racer, добавив физическое поведение автомобилей. Чтобы поведение тачек было реальным и можно было делать заносы.
Быстро подняли Continuous Integration Server для автоматических билдов, в качестве рабочего названия выбрали NextRace. И каждый принялся делать своё дело. Денис начал моделлить тачки и окружение, Юрий занялся прототипом игры.
Я же начал писать внутреннюю архитектуру. Кстати, про архитектуру приложения стоит сказать отдельно: в прошлый раз у нас был авторитарный сервер, который в случае обнаружения читеров (время не совпадает или денег больше, чем надо), откатывал прогресс игрока назад. И если по какой-нибудь причине сервер не запоминал прогресс, а это случалось довольно часто, то ли баг какой или запросов слишком много — сервер исполнял «колесо отката» и сбрасывал текущий прогресс. Игроки плакали, кричали «Разраб, верни галду!», писали в саппорт пачками.
В этот раз мы решили, что сервер будет только для восстановления прогресса игрока и хранения лучших результатов — топов, а также для подгрузки новых элементов — машин, красок, винилов. Серверу предстояло играть лишь вспомогательную роль, и он никак не мог причинить вреда пользователям. Это означало, что локально читеры могли читерить сколько угодно, но никак не влияли на других игроков. Локально 95% читеров отсекает ассет от нашего соотечественника Дмитрия Юханова —
CodeStage Anticheat Toolkit.
Теперь мне надо было написать максимально гибкую сериализацию, чтобы новые фичи, новые объекты легко было интегрировать, а прогресс из версии к версии игры восстанавливался без проблем.
За первые три недели мы получили прототип геймплея. Физику поведения машины купили в Unity Asset Store, слегка её подтюнили и начали искать удобное управление автомобилем в рамках сеттинга «гонка-раннер». Изначально управление было двух типов — кнопки и гироскоп. Позднее мы добавили руль.
Больше всего проблем было с генерацией мира. Как известно, сразу огромный мир создать невозможно в силу трудозатратности. В мире без физики бесконечный раннер сделать довольно-таки просто, есть две техники:
- ты как центральный объект стоишь на месте, а все объекты «достраиваются» и бегут вокруг тебя;
- ты бежишь по миру, а мир «достраивается» по мере движения.
У каждого решения есть свои плюсы и минусы, но в случае использования физики всё становится сложнее — надо синхронизировать физическое состояние мира. Хотелось, чтобы не только своя, но и остальные машины вели себя адекватно. Решили сделать следующим образом:
- Мир создаётся из кусков дороги, которые подходят друг другу.
- Авто едет по трассе, и мир «достраивается» спереди. Сзади мир уничтожается.
- У трафика есть свой определённый путь — линия, по которому он едет. При переходе из одного куска дороги к другому он находит соответствующую линию и продолжает по ней движение, в соответствии с законами физики. Для создания путей мы использовали Spline Editor.
Через полтора месяца была готова самая первая версия игры. Игра запускалась, и пользователь сразу ехал. Не было ни выбора машин, ни настроек. Зато была машина, уходящая в неуправляемый дрифт при слишком сильном разгоне, и неспешно едущие остальные машины из трафика, от которых надо было уворачиваться. Уже на этом этапе было залипательно.
Ещё через две недели был готов гараж и основные элементы UI для него. Денис уже вовсю выдавал новый контент, я же старался оперативно встраивать его в текущую версию. Благо, у нас уже был опыт в этом деле, и мы заранее автоматизировали импорт основных типов объектов в Unity. Так, например, экспорт или импорт автомобиля из 3D-пакета в Unity занимал не более минуты.
После этого началось самое интересное: выдумывание и разработка непосредственно игры. Нашим главным преимуществом и одновременно недостатком было отсутствие бюрократии и планирования — сегодня мы задумывались, что хорошо бы сделать такую-то игровую фичу, на следущий же день эта фича была уже в разработке. Мы не экспериментировали, мы не считали, чем это поможет игре — мы сразу делали.
Постоянно пользовались Asset Store: для интерфейсов использовали NGUI, для платёжной системы — Unibill, звук проигрывали с помощью MasterAudio.
20 июня 2014 года мы выпустили первую версию в СНГ в открытый бета-запуск (софт-лонч). Игру назвали XRacer. Целью софт-лонча было собрать статистику, оценить показатели.
За один месяц без бюджетов на рекламу и маркетинг мы получили чуть меньше 40 тысяч установок. Выяснили, что игроки проводят в игре довольно продолжительное время, приглашают друзей, и платят очень мало денег. Это было ожидаемо, потому что мы не прибегали к помощи геймдизайнеров, и наш посчитанный баланс был слишком простым для пользователя. Пользователям не нужно было платить. Более того, игрокам не была очевидна цель игры — её там и не было.
После исправления критических ошибок и перерыва в два месяца мы начали вдумчиво реализовывать геймплей. Много экспериментировали, изучали рынок, конкурентов. В первую очередь, добавили глобальную карту-лобби, бесконечные и миссионные заезды. Сделали систему апгрейдов машин, теперь каждое обновление улучшало характеристики автомобиля. Добавили больше контента.
Далее призвали нашего старого друга-геймдизайнера, он определил игровые цели, посчитал баланс. Все держали в Google-документе, получилось очень много цифр. Поняли, что при каждом изменении перевбивать цифры вручную будет слишком долго, научились импортировать данные с помощью плагина
Google Doc Connector.
Изменения делали итерациями, результат получали довольно быстро. В этом очень помог CI-server: у нас всегда под рукой были самые свежие билды, с помощью логов мы оптимизировали потребление памяти на девайсах. И да, мы уложились в 50 МБ.
И только после нескольких итераций, экспериментов и доводки баланса до хорошего уровня мы выпустились. Изменения были глобальные, и их оказалось так много, что мы решили выпустить тайтл как новую игру — Traffic Nation. Надеемся, что старым игрокам изменения понравятся, а новые игроки станут нашими фанатами.
Спасибо за внимание.
Если вы работаете на технологии Unity, хотите рассказать о своём опыте разработки или задать вопрос экспертам — оставьте заявку нашим менторам с помощью специальной формы.
About the author