Saltar al contenido principal

Crea un MMORPG de captura de monstruos

PokeMMO demostró que los jugadores quieren un mundo persistente en línea donde capturar, combatir, intercambiar y socializar. Construir esa experiencia desde cero le llevó al equipo de PokeMMO más de una década de desarrollo.

Un mundo en línea en vivo

La pestaña Online del Hub

La tira de canales, el contador de jugadores cercanos y la insignia de latencia no son una maqueta: es el cliente conectado a un servidor de Nakama, y la pestaña del Hub de abajo es donde lo apuntas al tuyo.

Las ediciones Pro, Source y Studio de OpenMon incluyen 25 servicios integrados que proporcionan el backend de un MMO de captura de monstruos, impulsados por Nakama, un servidor de juegos de código abierto usado por estudios de todo el mundo.

Disponible en las ediciones Pro, Source y Studio.

Qué obtienes​

La edición Pro extiende el motor de un solo jugador de OpenMon con un backend multijugador. Cada servicio es una propiedad pública de NakamaManager.Instance, y cada uno tiene su propia guía:

MóduloServicios (propiedades de NakamaManager)Guía
AutenticaciónAuth, SessionMgr: inicio de sesión por correo, dispositivo y SSO (Discord, Google, Apple) con persistencia de sesión y reconexión automáticaAutenticación
MundoWorldSync, Channels: mundo compartido en tiempo real, una partida por mapa, área de interés en el servidor, canalesSincronización del mundo
BatallasMatchmaker, PvpBattle, Spectator, Raids: batallas salvajes y PvP autoritativas en el servidor, emparejamiento por ELO, espectadores, incursiones de 5 jugadoresBatallas PvP, Autoridad de batalla
SocialChat, Guilds, Friends, Trade: canales y mensajes privados, gremios con roles, amigos y presencia, intercambio atómico entre jugadoresSocial
EconomíaWallet, Shop, GTL, Gts, Inventory: moneda autoritativa en el servidor, tiendas, el mercado Global Trade Link y la Global Trade StationEconomía
ViviendasHousing, BaseSync, Gym: bases secretas que otros pueden visitar, copresencia en vivo dentro de una base, gimnasios de jugador a los que desafiarViviendas de jugador
PersistenciaCloudSave: almacenamiento de guardados en el servidor con detección de conflictosLiveOps
LiveOpsEvents, Leaderboards, Achievements, Mods: eventos en vivo, clasificaciones, logros, carga de modsLiveOps
OperacionesAntiCheatManager, GameMasterService: comprobaciones antitrampas y una consola de game master para probar y operar un servidor en vivoModo GM
ExpresiónGlobos de emoción mostrados a los jugadores a tu alrededorEmotes en línea
Regalos de monstruosIniciales y regalos de NPC acuñados por el servidorRegalos de monstruos

Descripción general de la arquitectura​

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

El cliente se conecta a Nakama mediante WebSockets para la comunicación en tiempo real. Toda la lógica de juego autoritativa se ejecuta en el servidor mediante RPC (llamadas a procedimientos remotos); el mundo se ejecuta en un plugin de Go. PostgreSQL guarda los datos persistentes.

Primeros pasos​

Paso 1: Configura el servidor​

El servidor se distribuye como un paquete. En la pestaña Online del Hub pulsa Extract Server Bundle y luego inícialo con Docker:

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

El docker-compose.yml del paquete viene preconfigurado con Nakama y PostgreSQL. Esto te da un servidor de desarrollo local en aproximadamente un minuto. La pestaña Online del Hub también tiene los botones Start Server, Stop Server y Show Logs para la pila de Docker.

Para producción, puedes desplegar en cualquier proveedor de nube. Nakama soporta:

  • Heroic Cloud (gestionado, lo más fácil)
  • AWS / GCP / Azure (autoalojado, control total)
  • DigitalOcean / Hetzner (VPS económico)

Consulta Configuración en línea para ver los detalles.

Paso 2: Configura el cliente​

En Unity, configura el asset OnlineConfig:

  1. Abre el OpenMon Hub (Tools > MCE > OpenMon Hub) → pestaña Online → Online Setup Wizard
  2. Establece la URL de tu servidor (por defecto: 127.0.0.1:7350 para desarrollo)
  3. Establece la clave del servidor (por defecto: defaultkey para desarrollo)
  4. El asset de configuración vive en una carpeta Resources (Assets/Resources/OnlineConfig.asset) y se carga automáticamente

Paso 3: Habilita el modo en línea​

Agrega el símbolo de scripting define MCE_ONLINE a tu proyecto (o usa el botón Setup Online de la pestaña Welcome del Hub, que lo hace por ti):

  1. Edit > Project Settings > Player > Scripting Define Symbols
  2. Agrega MCE_ONLINE
  3. El singleton NakamaManager se crea automáticamente al cargar la primera escena

Paso 4: Siembra el servidor​

Un servidor nuevo no conoce tu juego. Exporta tus datos y envíalos antes de juzgar cualquier resultado de batalla: consulta Siembra de especies y la pestaña Seeding del Hub.

Paso 5: Prueba la conectividad​

Entra en Play Mode. La consola muestra líneas como:

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

Abre una segunda instancia del editor de Unity (o compila una versión independiente) para probar las funciones multijugador con dos clientes.

Construir las funciones clave​

Sistema de batalla PvP​

Las batallas PvP de OpenMon son autoritativas en el servidor: el servidor valida cada movimiento, evita las trampas y gestiona las desconexiones.

// 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
};

El sistema de emparejamiento busca dentro de una ventana de clasificación alrededor del ELO del jugador y soporta cancelar una búsqueda. Los espectadores y las incursiones de 5 jugadores están en el mismo módulo: consulta Batallas PvP.

Sistema de intercambio​

El intercambio validado por el servidor evita la duplicación de objetos y garantiza intercambios justos:

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);

Sistema de gremios​

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

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

Viviendas de jugador​

Las viviendas permiten a los jugadores personalizar espacios personales:

  • Construir una base secreta y decorarla desde un catálogo
  • Dejar que los amigos la visiten (una instantánea guardada, o en vivo dentro de la base, todos juntos)
  • Desafiar los gimnasios de otros jugadores
  • Consulta Viviendas de jugador para ver las tres capas

Economía y mercado​

La economía autoritativa en el servidor evita la inflación y la explotación:

  • Cartera y tiendas: el servidor es dueño del saldo y fija el precio de los objetos
  • Global Trade Link (GTL): los jugadores publican monstruos y objetos a la venta; otros jugadores buscan y compran, con una tarifa de anuncio y una caducidad
  • Global Trade Station (GTS): deposita un monstruo y pide otro tipo a cambio

Consola de game master​

Opera y prueba tu servidor en vivo desde el editor o en el juego, con los verbos del Modo GM.

Escalar para producción​

Arquitectura del servidor para escalar​

El mundo está diseñado para ser barato por jugador: el servidor envía a cada cliente un lote por tick con solo lo que puede ver. El dimensionamiento de abajo es una pauta de planificación, no una promesa: mide tu propio despliegue.

Jugadores concurrentesInfraestructura
1-500Un solo Nakama + PostgreSQL
500-5.000Clúster de Nakama (2-3 nodos) + PostgreSQL gestionado
5.000-50.000Clúster de Nakama con autoescalado + réplicas de lectura
50.000+Clústeres regionales + emparejamiento global

Costos de alojamiento (estimados)​

EscalaCosto mensual
Desarrollo0 $ (Docker local)
Lanzamiento suave (100 CCU)20-50 $/mes (VPS)
En vivo (1.000 CCU)100-300 $/mes
Crecimiento (10.000 CCU)500-2.000 $/mes

Son estimaciones aproximadas. Los costos reales dependen de la ubicación de tu servidor, la transferencia de datos y el tamaño de la base de datos.

Lo que construyó PokeMMO y obtienes incluido​

FunciónPokeMMO (a medida, más de 10 años)OpenMon Online (incluido)
Mundo en tiempo realRed a medida en JavaUna partida de Nakama por mapa, área de interés en el servidor
Batallas PvPServidor de batalla a medidaPvP autoritativo en el servidor
IntercambioProtocolo de intercambio a medidaServicio de intercambio validado
ChatServidor de chat a medidaCanales de chat de Nakama
EconomíaMercado a medidaMercados GTL / GTS + cartera y tiendas
AntitrampasValidación en el servidor a medidaLógica autoritativa en el servidor
GremiosSistema de gremios a medidaGrupos de Nakama + extensiones

Limitaciones y expectativas honestas​

Construir un MMO es difícil. OpenMon Pro se encarga de la infraestructura técnica, pero aun así tienes que:

  • Diseñar contenido atractivo: un MMO necesita contenido continuo para retener a los jugadores
  • Moderar tu comunidad: moderación del chat, sistemas de bloqueo, denuncias de jugadores
  • Mantener los servidores: actualizaciones, monitorización, copias de seguridad, escalado
  • Equilibrar la economía: economía de dinero real y de moneda del juego
  • Gestionar las operaciones: atención al cliente, triaje de errores, eventos en vivo

Un MMO es un servicio, no un producto. Prepárate para un compromiso continuo.

Próximos pasos​