Мой третий заход в GameDev оказался довольно продуктивным.
В очередной раз ностальгия по закрытому игровому проекту Rival Fire, где наш клан бился с ордами монстров и побеждал в PvP-турнирах 4×4 и 2×2, подтолкнула меня попробовать написать похожий проект с нуля.
Я давно хотел попробовать себя в создании игровых миров. Но чтение литературы и примитивные прототипы меня не устраивали. Сейчас я настроен сделать рабочий прототип многопользовательской мобильной игры. Главный ресурс - время, и его вечно не хватает. Конечно, если всё получится, модели персонажей, оружие и локации планирую отдать на аутсорс.
Игровой клиент
Для игрового клиента я выбрал движок Unity 3D и, чтобы не перегореть ещё на этапе графики, взял для рабочего прототипа бесплатные модели из открытого доступа. Хотя за последние три года я и набрался опыта в Blender, делать 3D-модели - это очень трудозатратно. Так что пока из своей графики у меня только UI.
В альфа-версии запланировал
- Кооперативный бой на уровне (до четырёх игроков онлайн) с волнами, где игроку с командой нужно зачистить локацию от разных монстров (от летающих до ползающих), а на финальной волне сразиться с боссом.
- PvP-бой 1 на 1 на зеркальной арене.
Сервер
Сервер матчей я написал на Node.js. Клиент с сервером общаются через веб-сокеты в формате JSON. На каждый матч поднимается отдельный процесс, который обслуживает игровую сессию для всех клиентов матча на своём сетевом порту. Пока не решил, хорошая ли это идея - использовать TCP вместо UDP. Но при тестах с двумя устройствами одновременно проблем не было
Сейчас сервер успешно спавнит NPC-монстров по сценарию из базы данных для всех игровых клиентов.
Отдельная большая тема - синхронизация позиции и действий игрока, особенно когда теряются пакеты. Может получиться так, что на клиенте игрока персонаж уже в точке C, а у всех остальных (из-за потерянных данных) он всё ещё в точке B.
Игровые ассеты
Игровые ассеты, которые могут часто меняться (персонажи, модели, звуки, логика стрельбы), я решил вынести в Asset Bundle и проверять обновления при каждом запуске клиента. Так обычно делают в современных играх, чтобы не заставлять пользователей постоянно качать приложение из маркета ради хотфиксов, а заодно уменьшить начальный размер игры и не отпугнуть игроков.
Git-репозиторий
Игра состоит из серверного и клиентского кода. С серверным всё просто, он весит всего 4 мегабайта, а вот с клиентом сложнее. Сырые текстуры для пребилдов занимают около гигабайта, и дальше будет только больше. Поэтому я решил поднять дома свой Git-сервер на Raspberry Pi 4.
Купил Raspberry Pi 4 вместе с корпусом, кулером и M.2 SSD на 512 ГБ и переношу весь код локально на «малинку».

Корпус и SSD-расширение можно найти здесь: https://a.aliexpress.com/_9RbPFU
Ещё я развернул на ней копию сервера и гоняю весь игровой процесс локально на двух компьютерах. Думаю, позже покажу, как забавно мои тесты выглядят со стороны.



