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.


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ódulo | Servicios (propiedades de NakamaManager) | Guía |
|---|---|---|
| Autenticación | Auth, SessionMgr: inicio de sesión por correo, dispositivo y SSO (Discord, Google, Apple) con persistencia de sesión y reconexión automática | Autenticación |
| Mundo | WorldSync, Channels: mundo compartido en tiempo real, una partida por mapa, área de interés en el servidor, canales | Sincronización del mundo |
| Batallas | Matchmaker, PvpBattle, Spectator, Raids: batallas salvajes y PvP autoritativas en el servidor, emparejamiento por ELO, espectadores, incursiones de 5 jugadores | Batallas PvP, Autoridad de batalla |
| Social | Chat, Guilds, Friends, Trade: canales y mensajes privados, gremios con roles, amigos y presencia, intercambio atómico entre jugadores | Social |
| Economía | Wallet, Shop, GTL, Gts, Inventory: moneda autoritativa en el servidor, tiendas, el mercado Global Trade Link y la Global Trade Station | Economía |
| Viviendas | Housing, BaseSync, Gym: bases secretas que otros pueden visitar, copresencia en vivo dentro de una base, gimnasios de jugador a los que desafiar | Viviendas de jugador |
| Persistencia | CloudSave: almacenamiento de guardados en el servidor con detección de conflictos | LiveOps |
| LiveOps | Events, Leaderboards, Achievements, Mods: eventos en vivo, clasificaciones, logros, carga de mods | LiveOps |
| Operaciones | AntiCheatManager, GameMasterService: comprobaciones antitrampas y una consola de game master para probar y operar un servidor en vivo | Modo GM |
| Expresión | Globos de emoción mostrados a los jugadores a tu alrededor | Emotes en línea |
| Regalos de monstruos | Iniciales y regalos de NPC acuñados por el servidor | Regalos 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:
- Abre el OpenMon Hub (
Tools > MCE > OpenMon Hub) → pestaña Online → Online Setup Wizard - Establece la URL de tu servidor (por defecto:
127.0.0.1:7350para desarrollo) - Establece la clave del servidor (por defecto:
defaultkeypara desarrollo) - 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):
- Edit > Project Settings > Player > Scripting Define Symbols
- Agrega
MCE_ONLINE - 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 concurrentes | Infraestructura |
|---|---|
| 1-500 | Un solo Nakama + PostgreSQL |
| 500-5.000 | Clúster de Nakama (2-3 nodos) + PostgreSQL gestionado |
| 5.000-50.000 | Clúster de Nakama con autoescalado + réplicas de lectura |
| 50.000+ | Clústeres regionales + emparejamiento global |
Costos de alojamiento (estimados)
| Escala | Costo mensual |
|---|---|
| Desarrollo | 0 $ (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ón | PokeMMO (a medida, más de 10 años) | OpenMon Online (incluido) |
|---|---|---|
| Mundo en tiempo real | Red a medida en Java | Una partida de Nakama por mapa, área de interés en el servidor |
| Batallas PvP | Servidor de batalla a medida | PvP autoritativo en el servidor |
| Intercambio | Protocolo de intercambio a medida | Servicio de intercambio validado |
| Chat | Servidor de chat a medida | Canales de chat de Nakama |
| Economía | Mercado a medida | Mercados GTL / GTS + cartera y tiendas |
| Antitrampas | Validación en el servidor a medida | Lógica autoritativa en el servidor |
| Gremios | Sistema de gremios a medida | Grupos 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
- Guía de configuración en línea -- configuración detallada del servidor
- Autenticación -- sistemas de cuentas de usuario
- Batallas PvP -- configuración de batallas competitivas
- Economía -- mercado y moneda
- Funciones sociales -- amigos, gremios, chat