Привет всем, кто посетил мой репозиторий. Здесь я расскажу, как и почему выбрал развиваться в геймдеве и опишу реализацию своего проекта от идеи до текущего статуса процесса разработки. Это мой первый игровой проект, который будет опубликован, поскольку до него были пробы пера, уходившие в стол.
В данном проекте я объединил основные увлечения своей жизни, а именно: создание 3D-моделей, написание музыки, баскетбол и, самое главное, - разработка компьютерных игр.
Что такое The Sanctuary? Это баскетбольный зал на территории особняка канадского рэп-исполнителя Дрейка в Торонто, который был спроектирован дизайнером Феррисом Рафаули и достроен в 2020 году. Отличительная особенность зала в том, что его интерьер выполнен в фиолетовых оттенках. На паркете изображены эмблемы лейбла Дрейка OVO Sound, а на одной из стен расположены большой дисплей, табло и крупные номера «8» и «24», под которыми играл американский баскетболист Коби Брайант. Интересные дополнения баскетбольной площадки: звукоизоляционные конструкции на стенах, потолок с пирамидальным окном, через которое видно звездное небо и лаунж-зона для зрителей на втором этаже.
Изначально я задумал создать The Sanctuary в 3D как проект под шлемы виртуальной реальности, чтобы у любого желающего появилась возможность «посетить» баскетбольный зал Дрейка и побросать там мяч в кольцо. Но в процессе реализации я пришел к идее кроссплатформенной игры без разделения сетевой составляющей: пользователи, скачавшие приложение на смартфон, могут пересечься с людьми, открывшими игру в браузере, в VR или на ПК под управлением Windows, Linux или macOS.
Первая версия проекта была сделана на игровом движке Unity 3D за 3 месяца летом 2020 года во время самоизоляции: это было приложение для платформ Android, Windows и Linux, а также браузера. В тот момент я рассматривал разработку игр и программирование как хобби, поэтому совмещал создание проекта с основной работой инженера. В период с сентября 2020 года по январь 2021 года я почти не занимался проектом, так как был в командировках. Тогда я решил рискнуть, уйти в новую профессию и стать разработчиком на C#, который к тому моменту изучал уже 2,5 года.
Спустя почти полгода после первой сборки я посмотрел на свой проект более опытным и свежим взглядом и решил его переработать, используя новый для себя рендер URP (вместо LWRP). Universal Render Pipeline требовал оптимизации в части 3D-моделей и реализации механик: я практически заново построил все 3D-модели, сделав их модульными вместо монолитных, создал новые материалы и шейдеры к ним средствами Shader Graph’а, а также переписал большую часть кода, внедряя новые паттерны и методы. Поэтому можно сказать, что сейчас игра существует и разрабатывается в своей второй версии.
- Ощутить себя приближенным Дрейка и посетить 3D-копию баскетбольного зала The Sanctuary, пройтись по его территории, осмотреть детали интерьера
- Побросать мяч в кольцо, совершая двух- и трехочковые броски
- Кастомизировать мяч для игры, выбрав понравившийся орнамент, цвет для основы и разделительных линий
- Выбрать комнату, игровой режим и посоревноваться в бросках совместно с другими пользователями
- Послушать треки начинающих диджеев, хипхоп-артистов и битмейкеров, перелистывая их на табло
- Blender – создание 3D-моделей и анимаций
- Substance Painter – создание текстур объектов и запекания карт материалов
- Photoshop, GIMP 2 – редактирование текстур
- Ableton Live – создание музыки и звуковых эффектов
- .NET Standart 2.0 – написание библиотеки классов
- ASP.NET Core, SignalR – разработка сервера
- MongoDB – хранение данных о пользователях, треках и исполнителях
Далее я расскажу о своем развитии как разработчика, о том, как возникла идея создания 3D-копии зала The Sanctuary и подробнее опишу текущее состояние проекта, дополняя GIF-анимацией.
Меня зовут Владимир Дивак, на сегодня живу в городе Екатеринбург и по образованию я инженер АСУТП (инженер по специальности "Автоматизированные системы управления технологическими процессами") с опытом работы 3 года.
Я увлекался видеоиграми с самого детства: моей первой игрой стала PO'ed на приставке 3DO, на ПК же это были Quake и Quake II. Но всё же продолжительное время в детстве я проводил за Денди и практически всеми популярными на ней играми.
Когда мне было 11 лет, у меня появился собственный компьютер, на котором я играл во всё подряд, а годами позже я заинтересовался процессом разработки игр: делал карты для Counter-Strike 1.6, писал миссии для Grand Theft Auto: San Andreas и разрабатывал модификации для Far Cry.
В 2017 году я начал полноценно изучать цикл разработки игр на базе игровых движков: сначала освоил Unreal Engine 4 из-за обилия видео уроков на YouTube, а потом погрузился в Unity 3D, так как предложил и реализовал проект на работе на базе этого игрового движка. Проект представлял собой 3D-визуализацию датчиков состояния оборудования цеха, которая отображала пути до необходимых датчиков от кабинета оператора.
Реализовав проект я стал понемногу за счет экспериментов узнавать те или иные составляющие движка: сначала азы языка C#, потом различные базовые механики игр. Очень сильно увлёкся изучением сетевого взаимодействия, так как стал изучать возможности фреймворка .NET Core, после чего родилась идея сделать мультиплеерную игру. В начале 2020 года я решил создать публичный игровой проект, поэтому оставалось только найти подходящую идею.
Во время объявленной в России самоизоляции весной 2020 года я купил подписку на Spotify, в котором мои рекомендации плавно заполнились западным хип-хопом. Одним из вечеров я задался вопросом об истории становления Дрейка поп-артистом No1, так как в те дни о нем говорило много международных СМИ по причине релиза его нового альбома. Из новостных статей я узнал, что у Дрейка есть роскошный особняк в Торонто, на территории которого построен личный баскетбольный зал "The Sanctuary". Я нашел несколько фото и видео зала в медиа, дизайн интерьера мне показался интересным и тогда я подумал: "А что, если создать 3D-копию этого зала в VR, добавить игровые механики, а на фоне с эффектом реверберации (эхо) в зале крутить мои треки"? То есть я задумал проект как площадку привлечения внимания к моей музыке, но позже решил разработать кроссплатформенную игру и добавить туда треки начинающих музыкантов для взаимного продвижения.
В качестве основы игры служит баскетбольная площадка, воссозданная мной с реально существующего зала Дрейка "The Sanctuary" средствами Blender, мой опыт работы в котором на тот момент был уже более 2 лет.
Когда пользователь запускает игру, перед ним появляется главное меню, которое состоит из двух частей: пунктов меню и заднего плана. Пункты меню меняют размер в зависимости наведения на них мышью. Задний план состоит из баскетбольного мяча на фоне зала. Задний фон динамичен, он реагирует на перемещение мыши и плавно вращает мяч и вид зала в зависимости от положения курсора. В это время уже звучит добавленная в игру музыка, которая также влияет на задний план меню: баскетбольный мяч изменяется в размере в зависимости от значения уровня громкости низких частот воспроизводящегося трека.
При первом запуске игры пользователю будет предложено два варианта: ввод логина и пароля, либо создание нового аккаунта, после чего следует кастомизация внешнего вида мяча.
На площадке игрок может бросать мяч в корзину, а также управлять музыкальным плеером, который представлен в виде большого дисплея в центре зала и игровым табло ниже.
В виду того, что проект запланирован для многих платформ, реализация перемещения и бросков на каждой отличается:
- на ПК перемещение и взаимодействия реализованы на базе FPS-механик: движение на WASD/стрелки, взаимодействия с мячом или дисплеем - кнопки мыши;
- на телефонах управление в процессе разработки, так как на выбор у меня два варианта: тот, что уже реализован в виде той же самой FPS-механики (ссылки на видео оставлю в конце), и тот, что представляет с собой AR-механику, с управлением одним пальцем и переключением функционала специальными UI-элементами;
- в VR всё, в принципе, понятно: передвижение либо телепортацией, либо стиками.
Механика броска:
- на ПК при зажатии ЛКМ и наведении курсора на мяч последний "подбирается в руки", о чем сигнализирует его прозрачность и перемещение в пространстве перед игроком (привет, Half-Life 2). Броски осуществляются при отжатии ЛКМ, при этом если мяч направлен в одно из колец запускается механика выбора силы броска, которая подразумевает, что игрок отожмёт кнопку мыши в момент, когда мяч будет зелёным;
- на телефонах сейчас используется такой же метод, однако есть идея управления одним пальцем: сила броска регулируется перемещением большого пальца вертикально, до момента, пока игрок не найдет положение, в котором мяч, опять-таки, становится зелёным;
- в VR - берём мяч и бросаем в кольцо, разве что игра немного скорректирует траекторию полёта.
Изначально я хотел создать и использовать только свой музыкальный контент в игре, однако за первые месяцы работы над проектом я успел написать только один трек. Тогда я решил, что наберу работы начинающих музыкантов, которые будут не против использования их творчества в игровой копии баскетбольного зала Дрейка, поскольку Дрейк очень популярен среди битмейкеров. Вся музыка, данные о треках и их создателях подгружаются при наличии обновлений на сервере. Также имеется счетчик прослушиваний того или иного трека. Надеюсь, что с данным функционалом в случае популярности проекта у задействованных музыкантов появится больший спрос на их творчество.
В один момент я осознал, что просто бросать мяч в кольцо будет интересно только фанатам Дрейка, а остальным, кто скачает приложение из игрового магазина по случайной рекомендации, захочется расширенного геймплея. По этой причине я разработал несколько режимов игры и добавил сетеове взаимодействие пользователей.
Как это работает:
- через пункт главного меню "Multiplayer" игроку предлагается на выбор список уже созданных комнат с определённым режимом игры, а также пользователь может выбрать игровой режим, запустить собственную комнату и играть вместе с друзьями;
- при присоединении к комнате игрок попадает в лобби, где другие игроки видят друг друга и могут пообщаться и побросать мяч, пока ждут готовности всех участников;
- как только все члены лобби готовы — игра запускает выбранный режим.
По окончании игры победителю записывается +1 количество побед в определённом режиме, которое в дальнейшем отображается рядом с его никнеймом в общем списке игроков
Все данные об аккаунте игрока (никнейм, внешний вид мяча и статистика по режимам игры) хранятся на сервере. Реализовано это средствами ASP.NET Core и MongoDB. Данные о музыкантах и их треках также расположены на сервере и отправляются клиентам, если была добавлена новая информация или же изменена старая.
В дальнейшем же планирую внедрить мастер-сервер и сеть серверов в разных точках, чтобы клиенты разных стран не испытывали проблем из-за высокого пинга.
Сейчас я завершаю разработку общего каркаса, который в дальнейшем будет разделён по особенностям игры на оставшихся платформах.
Каждый день я работаю над данным проектом, благодаря чему всегда узнаю что-то новое для себя в игровом движке, языке программирования и 3D-моделировании, что, в свою очередь, ещё сильнее вызывает у меня интерес к геймдеву.