Игра AirAttack! — наш первый опыт разработки в VR
Продолжаем серию публикаций о лучших мобильных приложениях выпускников «IT ШКОЛЫ SAMSUNG».
Сегодня — слово молодым разработчикам из Новосибирска, победителям конкурса VR-приложений «ШКОЛА VR 360» в 2018 году, когда они были студентами-первокурсниками. Этим конкурсом завершался спецпроект для выпускников «IT ШКОЛЫ SAMSUNG», где обучали разработке в Unity3d для очков виртуальной реальности Samsung Gear VR. Всем геймерам знаком жанр Tower Defense — нужно оборонять территорию от наступающих врагов с помощью строительства башен. Ребята решили взять эту механику и на её основе сделать свою VR-игру, но с другой стороны баррикад: здесь вы пилот, и ваша цель — помочь наземному отряду пройти до конца, ведя перестрелку с башнями, преграждающими путь. Игра сделана в ретро-стилистике LowPoly — трехмерные модели с небольшим числом полигонов, как в старых компьютерных играх. Под катом описание процесса разработки, видео и скриншоты игры, ссылка на исходники.
Что в итоге получилось
Далее
Кратко об условиях проекта Samsung «ШКОЛА VR 360», в рамках которого велась разработка игры AirAttack. Итак, выпускникам IT ШКОЛЫ SAMSUNG предлагалось:
- За 4 месяца пройти самостоятельно обучающую программу, для чего в ноябре были выданы лицензии на обучение по специализации из 5 онлайн курсов по VR-разработке
- Сформировать команду и за 3 месяца разработать собственный проект. В помощь были индивидуальные консультации от профи в VR разработке — компании «Увлекательная реальность»
- В мае представить проект специалистам Samsung, «Увлекательной реальности» и другим членам жюри.
Об идее
Кирилл Прокофьев, капитан команды:
Мы решили взять формат аркады, который был бы всем знаком, но при этом интересно смотрелся в VR и раскрылся бы под совершенно другим углом. Аркадных стрелялок в магазинах VR-приложений хоть отбавляй. Мы решили скрестить авиа-аркаду с Tower Defense: в игры, где защищаешь башни от самолетов-захватчиков, не играл только тот, кто не коротает время в метро.
Вы когда-нибудь задумывались, кто играет против вас, когда вы улучшаете башни?
Владимир Шперлинг, разработчик:
Нашей идеей было создать игровое LowPoly-приложение, поскольку это единственно возможный стиль для мобильного VR-приложения такого масштаба. С точки зрения геймплея мы решили не развивать уже существующие избитые темы, как скитание в космосе и прохождение VR-лабиринтов. Мы хотели чего-то большего.
О предыдущем опыте и ошибках
Владимир Шперлинг, разработчик:
Когда я впервые познакомился с VR годом ранее в 2016-м, в год окончания «IT ШКОЛЫ SAMSUNG», моя первая команда состояла всего из двух человек. Мы решили создать гоночную аркаду, назвали ее Speed Riders. Обязанности разделили следующим образом: один должен был отвечать за программный код, архитектуру и адаптацию приложения под VR, а второй — за концепцию, дизайн и целостность идеи. Возможно, такой подход был бы успешен для реализации приложения в малые сроки и командой с более высокой квалификацией, но на тот момент мы не знали особенностей проектирования VR-приложений и допустили множество ошибок.
Например, мы пытались реализовать слишком сложное взаимодействие игрока с объектами мира, при этом акцент был сделан на то, что любое движение игрока могло привести к эффекту укачивания или уменьшению качества передвижения. Это привело к невероятно нагруженному интерфейсу и сложным манипуляциям, в результате после первой минуты игры пользователю хотелось снять очки и не возвращаться. Стало понятно, что для исправления необходимо пересмотреть концепцию всего проекта. И это обнаружилось за 2 недели до защиты!
Демонстрация игры всем желающим на ежегодном конкурсе проектов Samsung
Кроме того, проблемы создавало отсутствие дополнительной визуализации и автоматизации для создания уровней: двум начинающим программистам приходилось делать уровни в 3–4 этапа. Совместная работа в git у нас не сложилась — Unity3D хранит сцены целиком, и их невозможно совместить впоследствии: приходилось ждать, пока кто-то из нас закончит работу, потом другой подключал свои детали… и так по кругу. Позже, при разработке AirAttack!, когда у нас было множество сцен, эта проблема частично разрешилась тем, что каждый из нас работал с разными сценами.
Работа над игрой
Владимир Шперлинг, разработчик:
Спустя год я снова решил принять участие в Школе VR 360 и мы с Кириллом объединились в команду. Проведя несколько часов с листом бумаги и чашками чая, мы разбили весь проект на этапы и расставили дедлайны:
- Создание главного меню
- Реализация 1-го уровня
- Тестирование и первичная отладка критических недочетов
- VR-оптимизация, устранение ошибок, наращивание функционала (очень важную роль мы уделяли деталям, ведь наша цель — сделать и оптимизировать, а не «налепить» много и плохо) и возможно архитектурные доработки
- Добавление новых уровней
- Публикация приложения в Oculus Store
- Добавление мультиплеера
- Добавление загружаемых материалов (в виде уровней, улучшений, новых кораблей и пр.)
В ходе разработки, несмотря на такие короткие сроки, мы старались обсудить каждый момент согласно диаграмме.
Любая идея обсуждалась, и выносился вердикт: быть ей или нет. Все одобренные идеи разбивались на задачи и реализовывались. Этап тестирования проводился своими силами, привлекали друзей и знакомых. Выслушивали пожелания и замечания, особенно отмечали, что вызывало трудности у тех, кто впервые входит в нашу игру, что приходилось объяснять в ходе сессии. Обсуждали новые фичи и начинали новый виток разработки.
Жестко держали дедлайны: порой самые интересные идеи приходилось отвергать, когда понимали, что не успеем их реализовать в заданные сроки.
Учитывая предыдущий опыт с Unity3D, и знание о том, как его можно модифицировать для упрощения разработки и создания уровней, мы уделили немного времени созданию «скриптов-помощников». Например, отображение радиуса поражения турелей — теперь мы могли контролировать, какие участки дороги охвачены турелями, какие участки будут наиболее сложные, а какие позволят игроку сделать передышку и перезарядиться или перевести дух. Или другой скрипт: отображение траектории движения для юнитов и игрока, чтобы мы могли наглядно увидеть, верно ли составлена траектория, и при необходимости исправить это. На изображении линия ломаная, но при движении было сделано сглаживание траектории.
На финал конкурса мы планировали реализовать лишь часть намеченных планов, остановиться на создании 4 уровней и в дальнейшем начать реализовывать дополнительный функционал. И всё бы было хорошо, если бы не…
Надежда на то, что все подключаемые библиотеки работают идеально, была одной из главных ошибок в ходе разработки игры. Нам пришлось модифицировать основную библиотеку от Oculus, которая позволяла задействовать возможности GearVR в полной мере, плюс все усложнилось из-за неполной документации. Каждая библиотека, подключённая к проекту, анализировалась на предмет производительности: часть кода была удалена, а непроизводительные конструкции исправлялись на более простые. В некоторых местах использовались «Unsafe» переменные-указатели, для предельной производительности, и данный код тщательно тестировался на отсутствие утечек памяти. Был использован модульный подход, при котором все объекты являются независимыми и могут быть удалены из сцены без повреждения кода. Каждый уровень был протестирован, и в «повышенной нагрузке» количество кадров в секунду не было ниже 50fps.
Кирилл Прокофьев, капитан команды:
Наша команда полностью уложилась в заявленные сроки — было написано около двух десятков скриптов, создан UI-интерфейс корабля, UI двух меню и инструкций.
Приложение полностью работоспособно. Все модели были тщательно подобраны и оптимизированы для уменьшения общего числа полигонов на сцене. За основу брались готовые модели в свободном доступе с разрешением для изменения.
В ходе работы над проектом AirAttack! мы уделили немалое время UED (User Experience Design, или UX). Помимо UI-элементов — главного меню, меню выхода из уровня, UI корабля и даже UI башен (Строки жизни) — различные процессы сопровождаются звуковыми и визуальными эффектами (например, частицы огня или тень от стекла самолета). Вся игра состоит из моделей «Low-Poly», что не только увеличивает производительность, но и создает атмосферу.
Итог
Игра удостоилась звания «Лучшее игровое приложение» на конкурсе «Школа VR 360» в 2018 году. Результат наших усилий — на видео ниже.
Исходники игры: bitbucket.org/Vova_SH/air-attack
Авторы:
Кирилл Прокофьев
Геймдизайнер
Капитан команды
prokyhouse@yandex.ru
Swift, Java, C#-разработчик, дизайнер
Призер чемпионата кибербезопасности
Победитель регионального тура конкурса проектов «IT ШКОЛА SAMSUNG» в 2017 году
Владимир Шперлинг
Unity-разработчик
vladimir-shperling@yandex.ru
Kotlin, Java, C#-разработчик
1 место финала конкурса проектов «IT ШКОЛА SAMSUNG» в 2016 году
2 место конкурса «Школа VR 360» 2017