Раздвигая горизонты. История создания игрового проекта

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

Идея

Идею создать платформу для геймеров вынашивали уже несколько лет. Основной мыслью было объединить сильные стороны двух типов ресурсов - информативность игровых форумов, чей недостаток в узкой специализированности, и, мягко говоря, неприветливости для новых пользователей; и, с другой стороны, социальных сетей, которые обладают широкой и разнообразной аудиторией, но с каждым годом все сильнее хромают в качестве контента. Проблема качества на первый взгляд лежит на поверхности - объемный и информативный контент читает меньше людей и как следствие меньше лайкают. Таким образом создавать такой контент менее выгодно, чем публиковать мемасики, и эта вроде бы очевидная проблема не имеет простого решения.

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

Концепт

Очевидно, на платформе, ориентированной на качественный контент, нужна система рейтинга контента, однако формат “рейтинг ради рейтинга”, как на том же реддите, нас не устраивал. Рейтинг, на наш взгляд, помимо отображения “крутости” пользователя, должен приносить практическую пользу его обладателю, тем самым стимулируя к участию на платформе. “Преврати свой ценный опыт в реальную выгоду” - к реализации этого лозунга должен прийти наш проект, а реальной выгодой для геймеров, помимо денег является игровой контент, рынок которого сейчас не перестает расти.

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

Ответ на вопрос: “как донести до геймеров принципы нашей экономической модели?” оказался удивительно прост - сделать экономическую игру! Зашить все сложные для простых юзеров механизмы в логику игры, и дать пользователям инструменты в виде игровых элементов, вот как!

Раздвигая горизонты. История создания игрового проекта

Первые шаги

Начинать работу над игрой нужно было с решения вопроса, в каком виде она будет реализована - в изометрии, которая проще в реализации как с точки зрения геймдизайна, так и создании графики; или же в трехмерном варианте, который гораздо более требовательный, но имеет лучшие возможности и внешний вид. Несмотря на то, что изометрия “вроде бы” удовлетворяла текущим нуждам игры, мы не стали идти простым путем. Движком для игры был выбран Unity 3D, ввиду его универсальности и широких возможностей.

Раздвигая горизонты. История создания игрового проекта

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

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

Туториал

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

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

Типа тыкай сюда, ставь туда и читай внимательно. Ужасная, конечно, штука, но лучше еще ничего не придумано.

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

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

Оптимизация

Это как правило титанический пласт работ, и наш случай не исключение. Делая 3D игру на Unity, с детальными моделями, визуальными эффектами и красивым окружением, да еще которая должна работать в браузере, с очередным обновлением мы уперлись в планку - у некоторых тестеров игра просто перестала загружаться!

Unity нельзя назвать прожорливой платформой, однако в нашем случае мы должны подстраиваться под аппетиты Гугл хрома и его коллег по бизнесу. При превышении планки объема оперативки на один процесс он просто отказывается его инициализировать. Да и сам при этом жрет немало. Сделать нативный клиент и послать гугл к чертям несложно, однако это решение нам не подходит, потому как говорить “скачай наш клиент или проваливай” юзеру, который впервые зашел и не знает о нас, было не вариант. Поэтому пришлось работать с тем что есть.

Итак, что надо было сделать ради высшей цели - оптимизации:

Снизить нагрузку рендера. Был создан атлас текстур, который подтягивает однотипные текстуры из одного файла, исключая повторения; выпилили лишние элементы; настроили систему Occlusion Culling, отключающую рендеринг заслоненных объектов, а также объектов, не попадающих в зону видимости камеры. Инструмент не очень сложный, но довольно полезный для снижения нагрузки

Скриншот из рабочей переписки
Скриншот из рабочей переписки

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

Далее настроили пакетную обработку (Static Batching + Dynamic Batching), целью которой является объединение игровых объектов в большие группы и отправка их на рендер. Изучая детально этот вопрос, выяснили, что для финальной настройки существуют определенные требования к моделям и их текстурам, которые уже были разработаны. Таким образом мы попали в вилку - смириться с нагрузкой либо делать новые модели и текстуры, то бишь пилить всю визуальную часть с нуля. Легких решений проблемы не было, и потому пришлось временно отключить все "не игровые" элементы до тех пор, пока не будут готовы новые модели. Эх, а такое было красивое окружение…

Уменьшить размер билда. Данный пункт реализовывали путем сжатия текстур под формат Unity, так как основную часть билда занимают именно текстуры.

Переделать эффекты. Визуальные эффекты, типа свечения, молний и прочего, как оказалось, сильно разнятся по затратам ресурсов на их создание. Методом исследования выяснилось, что эффект свечения, который мы использовали, создавал множество точек вокруг элемента, то есть Unity рендерил много крошечных объектов и оттого сильно нагружался.

<p>Мы просто заменили это свечение на другое, которое на глаз почти неотличимо, но создает на порядок меньше объектов и оттого существенно облегчает задачу его обработки.</p>

Мы просто заменили это свечение на другое, которое на глаз почти неотличимо, но создает на порядок меньше объектов и оттого существенно облегчает задачу его обработки.

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

Переход на React.js

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

Создание MVP и тестирование

Нет это не most valuable player, если вы об этом подумали.

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

Поэтому было принято решение провести тестирование. Мы выкатили текущую рабочую версию игры, сделали основной функционал для портала, прикрутили редактор и приобрели шмот для стима в качестве наград.

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

Спасибо за уделенное время! Если вас заинтересовал наш проект, вы можете оставлять свои комментарии и следить за нашими новостями в соцсетях VK и Instagram

1414
29 комментариев

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

6
Ответить

Комментарий недоступен

2
Ответить

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

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

На сколько я понял:
вы создаете Социальную платформу для геймеров, сочетающую социалку и форумы. А местная валюта, эквивалентная социальной активности, могла бы тратиться на игровые предметы для прицепляемых к платформе игр.

А дальше уже можно понять, интересно читателю это или нет и есть есть смысл вникать, если интересно.

4
Ответить

А что значит сочетать социалку и форум? Мне кажется грань тонкая между ними..

Ответить

Вы очень точно сформулировали основную мысль! И да, очень приятно что изучили статью и дошли до сути.
Могу я в дальнейшем использовать ваши тезисы?)

Ответить

Хм типа кармы на дтф шо ли? только за которую шмотки можно покупать?) Дак вы разоритесь если туда толпа набежит местная) она умеет рейтинг набивать)

2
Ответить

На то и рассчет - посмотрим как у них это получится ;)

Ответить