Перейти к основному содержимому

Создайте MMORPG про ловлю монстров

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

Живой онлайн-мир

Вкладка Online в Hub

Полоса каналов, число ближайших игроков и значок задержки — это не макет: это клиент, подключённый к серверу Nakama, а вкладка Hub ниже — то место, где вы направляете его на свой сервер.

Редакции Pro, Source и Studio OpenMon включают 25 интегрированных сервисов, образующих бэкенд для MMO про ловлю монстров, — на базе Nakama, игрового сервера с открытым исходным кодом, которым пользуются студии по всему миру.

Доступно в редакциях Pro, Source и Studio.

Что вы получаете​

Редакция Pro расширяет одиночный движок OpenMon многопользовательским бэкендом. Каждый сервис — публичное свойство NakamaManager.Instance, и у каждого есть своё руководство:

МодульСервисы (свойства NakamaManager)Руководство
АутентификацияAuth, SessionMgr — вход по почте, устройству и SSO (Discord, Google, Apple) с сохранением сессии и автоматическим переподключениемАутентификация
МирWorldSync, Channels — общий мир в реальном времени, один матч на карту, серверная область интереса, каналыСинхронизация мира
СраженияMatchmaker, PvpBattle, Spectator, Raids — серверно-авторитетные дикие и PvP-сражения, подбор по ELO, наблюдение, рейды на 5 игроковPvP-сражения, Авторитет сражений
СоциальноеChat, Guilds, Friends, Trade — каналы и личные сообщения, гильдии с ролями, друзья и присутствие, атомарный обмен между игрокамиСоциальное
ЭкономикаWallet, Shop, GTL, Gts, Inventory — серверно-авторитетная валюта, магазины, торговая площадка Global Trade Link и Global Trade StationЭкономика
ЖильёHousing, BaseSync, Gym — секретные базы, которые могут посещать другие, живое совместное присутствие внутри базы, залы игроков для вызоваЖильё игрока
ХранениеCloudSave — серверное хранение сохранений с обнаружением конфликтовLiveOps
LiveOpsEvents, Leaderboards, Achievements, Mods — живые события, рейтинги, достижения, загрузка модовLiveOps
ОперацииAntiCheatManager, GameMasterService — проверки против читов и консоль гейм-мастера для тестирования и управления живым серверомРежим GM
ВыразительностьЭмоциональные шарики, видимые окружающим игрокамОнлайн-эмоции
Подарки монстровСтартовые монстры и подарки NPC, создаваемые серверомПодарки монстров

Обзор архитектуры​

┌─────────────┐     WebSocket      ┌──────────────┐
│ Unity Client │ ◄──────────────► │ Nakama Server │
│ (OpenMon) │ │ (Docker) │
└─────────────┘ └──────┬───────┘
│
┌──────┴───────┐
│ PostgreSQL │
│ (Game Data) │
└──────────────┘

Клиент подключается к Nakama через WebSocket для общения в реальном времени. Вся авторитетная игровая логика выполняется на сервере через RPC (удалённые вызовы процедур); мир работает в плагине на Go. PostgreSQL хранит постоянные данные.

Начало работы​

Шаг 1: Настройте сервер​

Сервер поставляется в виде пакета. На вкладке Online в Hub нажмите Extract Server Bundle, затем запустите его через Docker:

cd path/to/OpenMon-Nakama-Server
docker compose up -d postgres nakama

docker-compose.yml пакета заранее настроен на Nakama и PostgreSQL. Это даёт вам локальный сервер разработки примерно за минуту. На вкладке Online в Hub также есть кнопки Start Server, Stop Server и Show Logs для стека Docker.

Для продакшена можно развернуть сервер у любого облачного провайдера. Nakama поддерживает:

  • Heroic Cloud (управляемый, проще всего)
  • AWS / GCP / Azure (собственный хостинг, полный контроль)
  • DigitalOcean / Hetzner (бюджетные VPS)

Подробности см. в разделе Онлайн-настройка.

Шаг 2: Настройте клиент​

В Unity настройте ассет OnlineConfig:

  1. Откройте OpenMon Hub (Tools > MCE > OpenMon Hub) → вкладка Online → Online Setup Wizard
  2. Задайте URL сервера (по умолчанию: 127.0.0.1:7350 для разработки)
  3. Задайте ключ сервера (по умолчанию: defaultkey для разработки)
  4. Ассет конфигурации находится в папке Resources (Assets/Resources/OnlineConfig.asset) и загружается автоматически

Шаг 3: Включите онлайн-режим​

Добавьте в проект символ define скриптинга MCE_ONLINE (или используйте кнопку Setup Online на вкладке Welcome в Hub, которая сделает это за вас):

  1. Edit > Project Settings > Player > Scripting Define Symbols
  2. Добавьте MCE_ONLINE
  3. Синглтон NakamaManager создаётся автоматически при загрузке первой сцены

Шаг 4: Засейте сервер​

Свежий сервер не знает вашей игры. Экспортируйте данные и отправьте их, прежде чем оценивать результаты сражений: см. Засев видов и вкладку Seeding в Hub.

Шаг 5: Проверьте подключение​

Войдите в Play Mode. В консоли появятся строки вроде:

[MCE Online] Connected as <DisplayName> (<UserId>)

Откройте второй экземпляр редактора Unity (или соберите автономную сборку), чтобы проверить многопользовательские функции с двумя клиентами.

Создание ключевых функций​

Система PvP-сражений​

PvP-сражения OpenMon серверно-авторитетны — сервер проверяет каждый ход, предотвращает читерство и обрабатывает отключения.

// Look for an opponent of a similar rating
await NakamaManager.Instance.Matchmaker.StartSearchAsync(eloRating: 1200, tier: "any");

NakamaManager.Instance.Matchmaker.OnMatchFound += (matchId, opponent) =>
{
// the authoritative battle then runs in a shared server-owned match
};

Система подбора ищет в окне рейтинга вокруг ELO игрока и поддерживает отмену поиска. Наблюдение и рейды на 5 игроков находятся в том же модуле: см. PvP-сражения.

Система обмена​

Обмен, проверяемый сервером, предотвращает дублирование предметов и обеспечивает честный обмен:

var trade = NakamaManager.Instance.Trade;

string tradeId = await trade.RequestTradeAsync(partnerId);
await trade.OfferMonsterAsync(tradeId, monsterId);
await trade.OfferItemAsync(tradeId, "rare_candy", 5);

// Both players confirm; the server then executes the trade atomically
await trade.ConfirmTradeAsync(tradeId);

Система гильдий​

GuildInfo guild = await NakamaManager.Instance.Guilds.CreateGuildAsync(
name: "Gym Leaders United", tag: "GLU", description: "Welcome!");

// Guilds have roles (promote, kick), search and member limits

Жильё игрока​

Жильё позволяет игрокам настраивать личные пространства:

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

Экономика и торговая площадка​

Серверно-авторитетная экономика предотвращает инфляцию и эксплуатацию:

  • Кошелёк и магазины — сервер владеет балансом и назначает цены предметам
  • Global Trade Link (GTL) — игроки выставляют монстров и предметы на продажу; другие игроки ищут и покупают, с комиссией за лот и сроком действия
  • Global Trade Station (GTS) — сдайте монстра и попросите взамен другой вид

Консоль гейм-мастера​

Управляйте живым сервером и тестируйте его из редактора или в игре с помощью глаголов Режима GM.

Масштабирование для продакшена​

Серверная архитектура для масштаба​

Мир построен так, чтобы быть дешёвым на игрока: сервер отправляет каждому клиенту один пакет за тик только с тем, что он видит. Приведённое ниже определение размеров — ориентир для планирования, а не обещание: измеряйте собственное развёртывание.

Одновременные игрокиИнфраструктура
1-500Один Nakama + PostgreSQL
500-5 000Кластер Nakama (2-3 узла) + управляемый PostgreSQL
5 000-50 000Автомасштабируемый кластер Nakama + реплики для чтения
50 000+Региональные кластеры + глобальный подбор

Затраты на хостинг (оценка)​

МасштабЕжемесячные расходы
Разработка$0 (локальный Docker)
Мягкий запуск (100 CCU)$20-50/мес (VPS)
Работа (1 000 CCU)$100-300/мес
Рост (10 000 CCU)$500-2 000/мес

Это грубые оценки. Фактические расходы зависят от расположения сервера, трафика данных и размера базы данных.

Что построил PokeMMO и что вы получаете в комплекте​

ФункцияPokeMMO (своя разработка, 10+ лет)OpenMon Online (в комплекте)
Мир в реальном времениСобственная сетевая часть на JavaМатч Nakama на карту, серверная область интереса
PvP-сраженияСобственный боевой серверСерверно-авторитетный PvP
ОбменСобственный протокол обменаПроверяемый сервис обмена
ЧатСобственный чат-серверЧат-каналы Nakama
ЭкономикаСобственная торговая площадкаПлощадки GTL / GTS + кошелёк и магазины
АнтичитСобственная серверная проверкаСерверно-авторитетная логика
ГильдииСобственная система гильдийГруппы Nakama + расширения

Ограничения и честные ожидания​

Создать MMO трудно. OpenMon Pro берёт на себя техническую инфраструктуру, но вам всё равно придётся:

  • Придумывать увлекательный контент — MMO нужен постоянный новый контент, чтобы удерживать игроков
  • Модерировать сообщество — модерация чата, системы блокировок, жалобы игроков
  • Обслуживать серверы — обновления, мониторинг, резервные копии, масштабирование
  • Балансировать экономику — экономика реальных денег и внутриигровой валюты
  • Вести операционную работу — поддержка клиентов, разбор ошибок, живые события

MMO — это сервис, а не продукт. Будьте готовы к постоянным обязательствам.

Следующие шаги​