Российский инди аналог Roblox с нуля. Часть 0: Интро и предполагаемая архитектура
Новости относительно блокировки Roblox уже поутихли, депутаты высказались в стиле "Надо пилить-распиливать российский аналог", первые эмоции угасли, теперь можно подойти к вопросу с более трезвым взглядом.
Наверняка, условные Mail и Yandex уже пилят свои проекты, причём, я уверен, начали они это делать ещё задолго до официальных новостей о блокировке, и конкурировать с ними в РФ, очевидно, никто не сможет и в здравом уме не станет. И начинать проект ради скорого захвата освободившейся ниши было бы опрометчиво. Я не строю иллюзий, что программист одиночка без бюджета сможет сделать аналог уровня Roblox. Моя история будет про другое.
Я среднестатистический бекенд разработчик около-синьорного уровня (никогда не любил эти грейды) без какого-либо опыта в геймдеве. По моим ощущениям, геймдев (особенно мультиплеер) всегда считался чем-то вроде высшей лиги, каждый программист так или иначе мечтает создать собственную игру, для нас это своего рода святой грааль. Это интересно, это увлекает.
Запуская этот проект и серию статей, я хочу пошагово пройти путь от схемы на бумаге до первого рабочего мультиплеер прототипа. Проект некоммерческий, без призывов задонатить или подписаться на telegram max-канал, писать буду исключительно на Пикабу. Мне, как разработчику, будет крайне полезно заиметь проект подобного уровня в резюме, а там как карта ляжет. Я не ставлю себе каких-то жестких сроков или дедлайнов, потому что есть основная работа, есть семья, есть спорт, ну и всё в таком духе. Тише едешь, дальше будешь.
Название
Под одним из соседних постов про российский аналог кто-то в шутку предложил название Rublox, а кто-то даже пошел и сразу зарегистрировал домен.
Я решил придерживаться другой логики и назвал проект Voblox, от слов Voxel Blocks. Воксель – это трехмерный аналог пикселя, представляющий собой элементарный куб в трехмерном пространстве. И конечно, это отчасти пародийное название на Roblox.
Предполагаемая архитектура
Мне нравится сама идея игровой онлайн-платформы, позволяющей любому пользователю создавать свои собственные и играть в созданные другими игры, охватывающие широкий спектр жанров. Да, большинство игр минималистичны, но все они разные и каждая со своей уникальной механикой, от простой песочницы со свободой действия аka Minecraft, до массовых соревновалок или даже баталий команда на команду. Дух захватывает от того, сколько всего можно сделать в рамках одной игровой платформы при правильном проектировании.
Каким будет стек:
– Unity в качестве кроссплатформенного игрового движка клиента;
– Go в качестве основного серверного языка;
– Lua в качестве скриптового языка для игр;
– Postgres в качестве основной базы данных;
– UDP с протобафом в качестве основного протокола взаимодействия клиент-сервер.
А вот так я представляю себе первую версию проекта:
Схема простая: игрок через Unity клиент игры подключается к игровому серверу c Lua машиной на борту и конкретным скриптом игры, в котором каждый игровой тик обрабатывается состояние игрового мира и рассылается игрокам. Ассеты для игры будут подгружаться из отдельного микросервиса, чтобы отсадить тяжелое TCP соединение от чувствительного UDP (об этом позже).
Очевидно, по мере реализации проекта, схема будет дополняться новыми микросервисами и связями: регистрация/авторизация пользователей, лобби со списком игр, скрипт-менеджер для жонглирования Lua скриптами, и т.д.
В следующей части разберём, что должен уметь Lua скрипт игры и какие события обрабатывать.

