Мтеки:

c#

Моя экспансия на GameDev #3

Мое третье явление в game dev вышло давольно плодотворным.

Опять моя тоска по закрытому игровому проекту, в котором мы всем кланом боролись с полчищами монстров и в pvp соревнованиях 4×4 и 2×2 одержала верх и я решил попробовать сам написать подобный проект с нуля.

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

Игровой клиент

Для игрового клиента решил использовать движок Unity 3d. При создании рабочего прототипа использовал бесплатные модели, которые находятся в свободном доступе, что бы не сгореть на этапе создания графического дизайна. Хоть у меня за последние три года и появился опыт работы в Blender, но отрисовка 3d моделей отнимает очень много сил. Так что пока из графики мое — только UI.

На этапе альфы планирую:

  • Уровень COOP сражения (до четырех online игроков) с волнами, в которых игроку предстоит с командой зачистить локацию от разнообразных монстров (от летающих до ползающих) плюс босс на последней волне.
  • PVP 1v1 на зеркальной арене.

Сервер

Сервер матча я написал на Nodejs. Для коммуникации клиент-сервер использую вебсокет и json формат. Каждый матч инстанцирует процесс, который на определенном сетевом порту обслуживает игровую сессию для всех игровых клиентов матча. Я пока не определил на сколько это хорошая идея использовать tcp протокол а не udp. Но при тестировании с двух устройств одновременно проблем не возникло.

Сейчас сервер успешно спаунит NPC монстров по сценарию из базы данных на все игровые клиенты.

Большая тема для обсуждения — это синхронизация позиционирования и вообще действий игрока, при потере пакетов. Так как может получиться так что у игрока на клиенте персонаж уже находится в точке C, а у всех остальных (из за потери данных) в точке B.

Ассеты

Внутриигровые ассеты, которые могут подвергаться частым изменениям (персонажи. модели, звуки, логика стрельбы) я решил вынести в Asset Bundle и каждый раз при запуске игрового клиента, проверять обновления. Так обычно делают в современных играх, что бы не приходилось при хотфиксах заставлять пользователей постоянно перекачивать приложение из маркета ну и что бы уменьшить первоначальный размер игры дабы не отпугнуть игрока.

Git репозиторий

Игра включает в себя код сервера и клиента. Если с сервером при хранении все просто, так как код занимает 4 мегабайта, то с клиентом сложнее. Сырые текстуры для пребилда занимают около гигабайта и будут рости. Поэтому я решил собрать дома свой гит сервер на raspberry pi 4.

Приобрел raspberry pi 4, а так-же корпус к нему, куллер и ssd на m2 сокете на 512GB и сливаю весь код локально на raspberry.

raspberry pi 4 в корпусе m2 Argon выглядит как тв приставка

Ссылка на корпус и ssd диск https://a.aliexpress.com/_9RbPFU

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

Финал

Мне пришла идея логировать все изменения и наработки по игре в телеграм канал https://t.me/sniperhit так же я завел домен с рабочий названием, где добавил виджет на канал https://sniperhit.ru/. Далее думаю все новости по проекту писать только туда.