跳到主要内容

构建怪物捕捉 MMORPG

PokeMMO 证明了玩家想要一个持久的在线世界,在其中捕捉、战斗、交易和社交。从零开始构建这样的体验,花了 PokeMMO 团队十多年的开发时间。

一个实时的在线世界

Hub 的 Online 选项卡

频道条、附近玩家数量和延迟徽章并不是示意图:那是 连接到 Nakama 服务器的客户端,而下面的 Hub 选项卡就是你把它指向你自己服务器的地方。

OpenMon 的 Pro、Source 和 Studio 版本包含 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 -- 实时活动、排名、成就、Mod 加载LiveOps
运营AntiCheatManager、GameMasterService -- 反作弊检查,以及用于测试和运营线上服务器的游戏管理员控制台GM 模式
表达向你周围的玩家显示的情绪气泡在线表情
怪物赠礼由服务器铸造的初始怪物和 NPC 赠礼怪物赠礼

架构概览​

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

客户端通过 WebSocket 连接到 Nakama 以进行实时通信。所有权威的游戏逻辑通过 RPC(远程过程调用)在服务器端运行;世界运行在一个 Go 插件中。PostgreSQL 存储持久数据。

入门​

步骤 1:设置服务器​

服务器以一个包的形式提供。在 Hub 的 Online 选项卡中按 Extract Server Bundle,然后用 Docker 启动:

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

包中的 docker-compose.yml 已预先配置了 Nakama 和 PostgreSQL。这能让你在大约一分钟内获得一个本地开发服务器。Hub 的 Online 选项卡中还有用于 Docker 栈的 Start Server、Stop Server 和 Show Logs 按钮。

对于生产环境,你可以部署到任何云提供商。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:启用在线模式​

把 MCE_ONLINE 脚本宏定义符号添加到你的项目中(或使用 Hub 的 Welcome 选项卡的 Setup Online 按钮,它会替你完成):

  1. Edit > Project Settings > Player > Scripting Define Symbols
  2. 添加 MCE_ONLINE
  3. NakamaManager 单例会在第一个场景加载时自动创建

步骤 4:为服务器播种​

新服务器并不了解你的游戏。在判断任何战斗结果之前,先导出你的数据并发送出去:参见物种播种和 Hub 的 Seeding 选项卡。

步骤 5:测试连接​

进入 Play Mode。控制台会显示类似这样的行:

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

打开第二个 Unity 编辑器实例(或构建一个独立版本),用两个客户端测试多人功能。

构建关键功能​

PvP 战斗系统​

OpenMon 的 PvP 战斗由服务器权威 —— 服务器验证每一个招式,防止作弊,并处理断线。

// 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 模式的动词,在编辑器或游戏中运营并测试你的线上服务器。

为生产环境扩展​

面向扩展的服务器架构​

世界被设计为按玩家计成本很低:服务器每个 tick 向每个客户端发送一个批次,只包含它能看到的内容。下面的规模划分是规划指南,而不是承诺:请衡量你自己的部署。

并发玩家基础设施
1-500单个 Nakama + PostgreSQL
500-5,000Nakama 集群(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 是一项服务,而不是一个产品。请为持续的投入做好准备。

下一步​