О концепциях и эволюции проекта Exoplanet Games

Если вы сейчас запустите мобильное приложение Exoplanet Games, то первым делом увидите очень простое меню: две кнопки, при нажатии на которые запускаются две разные небольшие аркадные игры, а на фоне, за кнопками, находится экзопланета, вокруг которой крутится орбитальная станция. Но такая простая форма у приложения была не всегда, да и по изначальному плану оно несло в себе совершенно другой смысл и являлось скорее дополнением к моему (ныне заброшенному) сайту «exoplanet su», который и сам по себе был для меня чем-то вроде полигона для освоения IT-технологий.

Приложение Exoplanet Games сейчас.

Далее я поподробнее расскажу про сайт, так как приложение выросло прямиком из него.

Начал я делать этот сайт спустя пару месяцев после того, как узнал о существовании языка разметки — HTML. Именно в процессе создания этого сайта я научился работать с базами данных, отправлять асинхронные запросы и делать прочие разные вещи, которые используют современные веб-приложения. Основная идея проекта заключалась в размещении контента в двумерном пространстве.

Сайт «exoplanet su».

Выглядело это следующим образом: центральную часть окна браузера занимала панель, на которой отображалась область условной 2D-карты. Эта карта имела свою собственную систему координат по иксу и игрику. Выше этой панели находилась ещё одна панель, указывающая на то, какой участок карты показывать пользователю. В этой панели устанавливались координаты определённой местности. Изменяя значения этих координат, можно было переводить фокус с одного участка карты на другие. В нижней части сайта разместилась панель с кнопками, напоминающая геймпад.

Панель имела кнопки крестовины и кнопку действия. Кнопки крестовины отвечали за перемещение небольшого прицела по видимой области карты. Этот прицел можно было наводить на определённые объекты, которые также находились в этом двумерном пространстве, для последующего взаимодействия с ними. Объекты, о которых идёт речь, выглядели как небольшие квадратики, которые могли содержать в себе различный контент. Чтобы ознакомиться с их контентом, нужно было навести прицел на такой квадратик и нажать на кнопку действия. Тогда открывалось окно, которое показывало содержимое выбранного объекта — это могли быть картинки, текст и различные ссылки.

Содержание одного из информационных квадратиков.

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

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

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

Пользователь движется из точки х-4600/y-3979 в точку х-3722/y-2678.

А ещё зарегистрированный пользователь мог размещать свой собственный контент на 2D-карте, и этот контент могли просматривать другие посетители сайта. Для этого была своя команда: после ввода которой вокруг кружка-юзера появлялся радиус, в пределах которого можно было выбирать место, где установить свой квадратик, а далее, используя специальную форму, наполнить его своим текстом, картинкой и ссылками.

Установка квадратика с контентом.

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

Мне хотелось добавить весьма неожиданный тип возможного контента. Идея заключалась в том, чтобы размещать в пространстве сайта различные интерактивные сцены. Но как это можно было сделать? Отвечая себе на этот вопрос, я и начал работу над приложением.

Платформой для создания приложения был выбран игровой движок Unity, так как ранее у меня уже был опыт работы с ним, но до этого я писал код только опираясь на какие-то туториалы с YouTube — в основном просто копипастил его в свои скрипты, чтобы игровые объекты делали какие-то штуки. Через пару месяцев разборки я сделал приложение. Тогда оно называлось как и сайт.

Так изначально выглядело приложение Exoplanet games.

В своей первой итерации приложение являлось чем-то вроде чекина местоположения юзера в 2D-пространстве сайта. Зарегистрированный на сайте пользователь мог залогиниться в приложении и при его помощи проверять, в каких координатах находится его кружок. При нажатии на определённую кнопку приложение получало информацию о местонахождении пользователя и информацию о том, в движении он или нет. Также были созданы первые тестовые интерактивные Unity-сцены, которые и были размещены на сайте для проверки работоспособности концепции.

Это работало так. В Unity есть система, которая называется Asset Bundle. Эта система позволяет удалённо хранить и подгружать в приложение ассеты, которые могут являться изображениями, музыкой и даже Unity-сценами. Единственное, что нельзя засунуть в ассет, — это скрипты с кодом. Каждая Unity-сцена, которую я хотел разместить в пространстве сайта, при помощи Asset Bundle помещалась в ассет, после чего заливалась на сервер. Специально для таких сцен я создал новый тип объектов, которые отображались на карте сайта символом треугольника; к объекту этого типа можно было привязать ссылку на тот или иной ассет с интерактивной сценой.

Вход в интерактивную сцену.

Чтобы попасть в интерактивную сцену, нужно было: на сайте переместиться и встать в область треугольника, открыть приложение и проверить там своё местоположение, и если всё было сделано верно, то появлялась кнопка «Зайти в сцену». При нажатии на эту кнопку приложение подтягивало сцену с сервера и запускало её. Тем самым, со своими ограничениями, мне удалось организовать задуманное.

Наверное, на этом месте стоит рассказать про сеттинг проекта, ведь все эти абстрактные треугольники, кружки и квадратики задумывались как обозначения определённых вещей. Как нетрудно догадаться, исходя из названия сайта, место, которое отображала карта, было некой далёкой экзопланетой. Кружок представлялся планетоходом, который колесил по её просторам. Квадратик — это был информационный контейнер, который мог устанавливать планетоход. А треугольники считались разломами в поверхности экзопланеты, открывающими доступ к её недрам. И эти разломы стали таким своеобразным проектом в проекте с названием Exoplanet Subsoil.

Скриншоты из разломов Subsoil.

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

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

Игра, которая была выбрана для эксперимента.

И вот на этом моменте я задумался о том, что я вообще делаю. Я понял, что экспериментом было не только это временное отступление от Subsoil, но и весь проект в целом, и пора было бы найти для него какую-то форму, чтобы можно было сделать хоть какой-то релиз.

Анализируя свои возможности, я понял, что самым логичным решением для приближения приложения к релизной версии было бы делать не один большой Subsoil, раскиданный по карте сайта, а маленькие аркады. За следующие несколько месяцев я сделал две небольшие, но завершённые аркадные игры и по тем же принципам разместил их в пространстве экзопланеты. Первая игра была про космолёт и астероиды, вторая — про пришельца и движущиеся платформы.

Первая аркада приложения Exoplanet Games.

Вторая аркада приложения Exoplanet Games.

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

Потому при следующей итерации приложения я практически выкинул сайт из уравнения. Теперь не нужно было регистрироваться и добираться до нужной точки, чтобы поиграть в игру. В приложении просто рендерились кнопки. При нажатии на эти кнопки с сервера сразу загружался ассет. Приложение по-прежнему обращалось к сайту, но пользователь этого никак не ощущал, имея стабильный интернет. В таком виде я выложил приложение в RuStore.

Так приложение выглядело на момент публикации в RuStore.

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

Симулятор похищения коров летающей тарелкой. В разработке для приложения Exoplanet Games.

И вот какое-то время назад я переработал приложение в то, чем оно является сейчас. Игры весят очень мало, а смысл делать динамическое размещение совсем пропал. Я убрал необходимость подключения к интернету и взаимодействие с сайтом совсем. Теперь, когда будет готова какая-либо новая игра или какое-то обновление, я просто сделаю новую версию приложения с этими нововведениями. Сейчас, помимо симулятора похищения коров летающей тарелкой, в разработке находится большое обновление к первой игре про космолёт.

По итогу скажу, что, несмотря на то что от изначальной идеи совсем ничего не осталось, весь этот процесс работы над проектом подарил мне весьма полезный опыт, да и этим было попросту очень интересно заниматься. А само приложение Exoplanet Games имеет отличную историю, живёт и ждёт новых обновлений.