[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "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", "tablet" ], "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", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "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-158433683", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxbwd&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&fmt=1&pr=" } } ]
{ "author_name": "Daria Khokhlova", "author_type": "self", "tags": ["\u0440\u044b\u043d\u043e\u043a_\u0438\u0433\u0440","gamedev","\u0438\u0433\u0440\u044b","\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435_\u0438\u0433\u0440\u044b","\u0440\u044b\u043d\u043e\u043a_\u0438\u0433\u0440_\u0432_\u0440\u043e\u0441\u0441\u0438\u0438","traffic_nation","\u0433\u043e\u043d\u043a\u0438"], "comments": 17, "likes": 12, "favorites": 1, "is_advertisement": false, "section_name": "default", "id": "9883" }
Daria Khokhlova
3 751

История разработки мобильного гоночного раннера Traffic Nation на движке Unity

Вместе с Unity ЦП публикует истории разработки игровых проектов, созданных на базе популярной технологии. Расскажите о своём кейсе, чтобы попасть в рубрику.

Сегодня в 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, хотите рассказать о своём опыте разработки или задать вопрос экспертам — оставьте заявку нашим менторам с помощью специальной формы.

#Рынок_игр #Игры #мобильные_игры #рынок_игр #рынок_игр_в_России #traffic_nation #гонки

Статьи по теме
Разработка приключенческой игры в Unity 4 и Unity 5 — опыт создателей The Uncertain
Создание реалистичной модели дракона с помощью Unity — опыт разработчиков Time of Dragons
Анонс рубрики Unity
Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

0 новых

Популярные

По порядку

Прямой эфир

Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления