メインコンテンツまでスキップ

MCE Online のセットアップ

MCE Online は、Nakama をバックエンドとして、Monster Capture Engine に完全な MMORPG レイヤーを追加します。このガイドでは、サーバーのセットアップ、クライアントの設定、接続テストの手順を説明します。

Pro、Source、Studio エディションで利用できます。

Nakama とは?​

Nakama は、次の機能を提供するオープンソースのゲームサーバーです。

  • ユーザー認証(メール、デバイス、SSO)。
  • リアルタイムのマルチプレイヤー(WebSocket)。
  • サーバー権威のゲームロジック(RPC)。
  • ELO ベースのレーティングによるマッチメイキング。
  • リーダーボード、実績、ライブイベント。
  • クラウドセーブとストレージ。
  • チャット、フレンド、ギルド。

MCE Online は、モンスター捕獲ジャンル向けの 25 個の専用サービスで Nakama をラップします。 これらは NakamaManager のパブリックなサービスプロパティです。お使いのバージョンの数を知りたければ、 ドキュメントの数字を信用するのではなく、そこで数えてください。

前提条件​

  • MCE Core がインストールされ、動作していること。
  • Docker Desktop(ローカル開発用)、またはホスト型の Nakama インスタンス。
  • MCE Online がプロジェクトにインポートされていること。

ステップ 1:Nakama サーバーを展開して起動する​

ローカル開発(Docker)​

Pro、Source、Studio には、Nakama サーバーが Assets/OpenMon/Online/Server/mce-nakama-server.zip として含まれています。 Unity の OpenMon Hub(Tools > MCE > OpenMon Hub)→ Online タブ → Extract Server Bundle から展開します。

接続モード、Nakama セットアップウィザード、種シードの状態、Docker サーバー操作を備えた OpenMon Hub の Online タブ

このガイドの内容はすべて、その 1 つのタブにあり、必要になるおおよその順に並んでいます。 上部に接続モード、その下に初回の Nakama セットアップ、続いて種の シーディング、そしてステップ 1 で使う Docker 操作です。

次に、展開したサーバーフォルダーを起動します。

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

これで次が起動します。

サービスホストのポート環境変数
Nakama HTTP API7350MCE_NAKAMA_PORT
Nakama gRPC7349MCE_NAKAMA_GRPC_PORT
Nakama 管理コンソール7351MCE_NAKAMA_CONSOLE_PORT
PostgreSQL5432MCE_PG_PORT

これらのポートがすでに使われている場合​

これらは Nakama と Postgres 自身のデフォルトであり、だからこそ 衝突します。すでに Postgres や 2 つ目の Nakama を動かしている人は、これらを使っています。

失敗は静かに起こり、そこが知っておくべき点です。Docker は明確なメッセージとともに 停止せず、コンテナーは Created のままで、理由は何も説明されません。

すべてのポートは、上の表の環境変数で上書きできます。

MCE_PG_PORT=5433 MCE_NAKAMA_PORT=7360 docker compose up -d postgres nakama

または、エディターから設定します。UI Toolkit Hub(Tools → MCE → OpenMon Hub (UI Toolkit)。デフォルトで開く IMGUI のものではなく、オプトインのウィンドウ)の Online タブには、 ポートピッカーがあります。

UI Toolkit Hub の Online タブのポートピッカー

Comprobar disponibilidad を押すと、各ポートは実際にバインドしてみることで確認されます。 この違いが重要です。ポートは一覧では空きに見えても、バインドを拒否することがあり、 そして Docker がこれから試みるのはまさにそのバインドだからです。

注記

ポートピッカーは、そのタブのうち、これまでに UI Toolkit へ移行された唯一の部分です。Online タブの 残りは、まだ従来の Hub にあり、ウィンドウにはそちらへ移動するボタンが 表示されます。

compose ファイルには、オプションの nakama-prodsim サービスも定義されています。これは、MCE_DEV_MODE なしで 同じモジュールを起動し、開発ゲートの E2E テストが、経済の付与 RPC が本番で 拒否されることを検証するために使います。

Nakama の管理コンソールには次の場所からアクセスします:http://localhost:7351

デフォルトの管理者の認証情報:

  • ユーザー名:admin
  • パスワード:password
本番環境

デフォルトの Docker 設定は開発専用です。本番環境では、ホスト型の Nakama インスタンス(Heroic Cloud、または適切なセキュリティ設定を施したセルフホスト)を使用してください。

ホスト型(Heroic Cloud)​

  1. heroiclabs.com でアカウントを作成します。
  2. 新しい Nakama プロジェクトを作成します。
  3. ダッシュボードから、サーバーの URL とサーバーキーを控えます。

ステップ 2:Unity クライアントを設定する​

OnlineConfig アセット​

MCE Online は、接続設定に OnlineConfig ScriptableObject を使います。

  1. クライアントは、Resources フォルダー(Assets/Resources/OnlineConfig.asset)から OnlineConfig という名前のアセットを読み込みます。Hub の Online タブの Select OnlineConfig を押すと開きます。
  2. 存在しない場合は作成します:Assets > Create > MCE > Online > Configuration。名前を OnlineConfig にして、Resources フォルダーに置きます。

次のフィールドを設定します。

フィールド説明ローカルのデフォルト
Server HostNakama サーバーのホスト名127.0.0.1
Server PortHTTP API のポート7350(または選んだ MCE_NAKAMA_PORT)
Server KeyAPI キー(Nakama コンソールから)defaultkey
Use SSLHTTPS/WSS を有効にするfalse(ローカル)、true(本番)

OnlineConfig には、次の設定も含まれます。

  • Enable Online と Allow Offline Fallback:ゲームがオンラインになるか、サーバーに接続できないときにオフラインプレイにフォールバックしてよいか。
  • Auto Reconnect と Max Reconnect Attempts:接続が切れたときの再接続。
  • Connection Timeout:接続の試行にかけてよい時間(秒)。
  • ワールド同期:トランスポートモード、関心領域の半径(AOIRadius)、最大可視プレイヤー数、位置同期のレート、チャンネル。
  • 機能のトグル:ハウジング、観戦、Mod サポート、サーバー権威、レイドバトル。シングルサインオンのプロバイダー(Discord、Google、Apple)。そして、フレンド、ギルドメンバー、GTL の出品、チャット履歴などの上限。

オンライン UI に絵文字フォントを与える​

オンライン UI は、アイコンの言語として絵文字を使っており、画面全体でおよそ 80 種類の異なるグリフがあります。 TextMesh Pro のデフォルトのフォントにはそれらが 1 つもなく、すべて ▯ として描画されます。

Hub → Build タブ → Setup Emoji Fallback (Online UI) を開いてください。 同梱の Noto Emoji フォント(SIL OFL 1.1、Assets/OpenMon/Online/UI/Fonts/ 内)を、TMP のフォールバックリストに接続します。

これが、あらかじめ済ませてあるのではなく、ステップである理由

フォントとその TMP アセットは Assets/OpenMon/Online の中に入っているため、 パッケージとともに届きます。接続はそうではありません。それは Assets/TextMesh Pro 配下の TMP Settings にあり、 どのエディションのペイロードにも含まれません。そのため、アセットは届きますが、それを指すリストは届きません -- 1 つのボタンがそのギャップを埋めます。

同じフォントアセットはダイナミックです。必要に応じて .ttf からグリフをラスタライズするため、 事前にベイクされるものはなく、追加してもアトラスのビルドコストはかかりません。デフォルトのフォントを 単純に拡張できない理由もそこにあります。そのアトラスは静的で、成長できないからです。

MCE_ONLINE define を有効にする​

MCE Online には、MCE_ONLINE スクリプティング define シンボルが必要です。

  1. Edit > Project Settings > Player > Other Settings > Scripting Define Symbols に移動します。
  2. リストに MCE_ONLINE を追加します。
  3. Apply をクリックします。

これにより、エンジン内のオンライン関連のすべてのコードパスが有効になります。

ステップ 3:サーバー側のコードをデプロイする​

MCE Online は、展開されたサーバーバンドルの中に 2 つのランタイムを同梱しています。RPC、 バトル、経済、ソーシャルのための TypeScript モジュールと、オーバーワールドのマッチを動かす Go プラグインです。

バンドルの構成(省略版。フォルダーには、記載よりも多くのファイルが入っています):

OpenMon-Nakama-Server/
README.md # Local setup + test commands
docker-compose.yml # Local Nakama + Postgres (+ optional prod-sim node)
nakama/
src/
main.ts # Entry point, RPC registration
battle/
pvp-engine.ts # Server-authoritative PvP
raid-engine.ts # Battle Tower / Raids
economy/
gtl.ts # Global Trade Link (GTL)
gtl-engine.ts # GTL matching engine
gts.ts # Global Trade Station (GTS)
data/
species.ts # Species/stats lookup tables
roster.ts # Roster helpers
shop.ts # Dev-gated shop catalog
social/
trade.ts # Direct player trading
world/
secretbase.ts # Secret Base multiplayer (F3-A snapshot RPCs)
playergym.ts # Player Gym challenge snapshot (F2b RPCs)
housing.ts # Legacy furniture placement validation
presence.ts # Presence + AOI + anti-teleport movement guard
go/ # The overworld match, in Go
main.go # Nakama match adapter
mundo.go # Tick loop: presences, AOI, batch assembly
aoi.go # Area of interest: grid + partial selection
formato.go # Compact batch format
construir.mjs # Rebuilds the plugin for another Nakama version
tools/ # Seed scripts: seed-species.js, seed-shop.js, ...
data/
modules/
mundo.so # The plugin, PREBUILT for Nakama 3.22.0 / linux-amd64
tsconfig.json
package.json
jest.config.js # Unit tests
jest.e2e.config.js # E2E tests (needs a running Nakama)
CONTRACT.md # RPC contract reference
オーバーワールドには Go プラグインが必要

world_map は TypeScript ではありません。nakama/data/modules/mundo.so としてビルド済みで同梱され、Nakama が 起動時に読み込むため、このバンドルが対象とする Nakama 3.22.0 / linux-amd64 では、追加の作業は何もありません。

Go プラグインは、それを読み込む Nakama とまったく同じバージョンに対してコンパイルされなければなりません。それ以外のバージョンでは、 ビルド済みのプラグインは読み込まれず、world_join は失敗します。TypeScript のフォールバックはありません。これは 意図的です。TypeScript 版のワールドは 1 ティックあたり 450 ms で、Go 版の 12 ms に対し、満杯のキューによって 253,606 件の位置が破棄されたのに対し、Go 版ではゼロでした。37 倍遅い黙ったフォールバックは、派手な 失敗よりも悪質です。目に見える原因がないまま、動作の悪いゲームを目にすることになるからです。

お使いのバージョン向けの再ビルドは node go/construir.mjs(Docker が必要)で行います。Go のソースは、まさにこのために バンドルに同梱されています。

注記

ソースリポジトリは、Unity に無視されるよう、これらのファイルを Assets/OpenMon/Online/Server~/ に置いています。商用パッケージは、それらを mce-nakama-server.zip として配布します。Docker や npm のコマンドを実行する前に、その zip を展開してください。

Nakama へのデプロイ​

  1. サーバーモジュールをビルドします。
cd path/to/OpenMon-Nakama-Server/nakama
npm install
npm run build
  1. ビルドは nakama/build/index.js にコンパイルされます(tsconfig.json の outFile を参照)。
  2. Nakama を再起動して、モジュールを読み込みます。

同梱の docker-compose.yml は、すでにビルドの出力をマウントしているため、手動でコピーする必要はありません。

volumes:
- ./nakama/data:/nakama/data
- ./nakama/build:/nakama/data/modules/build

ステップ 4:NakamaManager​

NakamaManager は、接続を管理するシングルトンです。

  • [RuntimeInitializeOnLoadMethod] により、実行時に自動的に作成されます。
  • 25 のサービスクラス(Auth、World、Battle、Social、Economy、Housing、Persistence、LiveOps、Modding)を所有します。
  • 指数バックオフで再接続を処理します。
  • Nakama とのすべての通信を、メインスレッドのキュー(スレッドセーフ)経由で送ります。

NakamaManager を手動で作成したり設定したりする必要はありません。OnlineConfig から読み取り、自分で初期化します。

接続状態​

Disconnected → Connecting → Connected
↓ ↓
Offline Disconnected
↑ ↑
(reconnect) (connection lost)
状態説明
Disconnected接続しておらず、試行もしていない
Connecting接続または再接続を試行中
Connected接続が有効で、すべてのサービスが利用可能
Offline接続に失敗し、オフラインモードで動作中

ステップ 5:接続をテストする​

クイックテスト​

  1. Nakama を起動します(Docker またはホスト型)。
  2. Unity プロジェクトを開きます。
  3. Play Mode に入ります。
  4. コンソールで接続メッセージを確認します。
[MCE Online] Connected as <DisplayName> (<UserId>)

接続テストスクリプト​

using UnityEngine;

public class OnlineConnectionTest : MonoBehaviour
{
private void Start()
{
// NakamaManager auto-creates itself
// Check connection state after a short delay
Invoke(nameof(CheckConnection), 3f);
}

private void CheckConnection()
{
var nakama = NakamaManager.Instance;
Debug.Log($"Connection State: {nakama.State}");
Debug.Log($"Connected: {nakama.IsConnected}");
}
}

管理コンソール​

オンラインセッション中のオーバーワールド:遅延とサーバーのバッジは右下にあります

右下隅のバッジは接続インジケーターで、往復の 遅延と、接続しているサーバーを示します。オンラインのセッションとオフラインのセッションを、 ひと目で見分ける最も速い方法です。

接続中に、Nakama の管理コンソール(http://localhost:7351)で次を確認します。

  1. Users に移動します -- 自動作成されたデバイスアカウントが見えるはずです。
  2. Runtime Modules に移動します -- ロードされた MCE のサーバーモジュールが見えるはずです。
  3. API Explorer に移動します -- RPC を直接テストします。

オンラインサービスの概要​

MCE Online は、25 のサービスクラスを次のモジュールにまとめています。それぞれが NakamaManager のパブリックプロパティです(括弧内に示します)。

モジュールサービス
AuthAuthService(Auth)-- メール、デバイス、SSO のログイン。SessionManager(SessionMgr)-- トークンの永続化と更新
WorldWorldSyncService(WorldSync)-- リアルタイムの移動と関心領域のフィルタリング。ChannelManager(Channels)-- ワールドチャンネル
BattleBattleMatchmaker(Matchmaker)、PvpBattleService(PvpBattle)、SpectatorService(Spectator)、RaidBattleService(Raids)
SocialChatService(Chat)、GuildService(Guilds)、FriendService(Friends)、TradeService(Trade)
EconomyGTLService(GTL)、GtsService(Gts)、WalletService(Wallet)、ShopService(Shop)、InventorySyncService(Inventory)
HousingHousingService(Housing)-- シークレットベースの保存/訪問/招待。BaseSyncService(BaseSync)-- ベース内でのライブな同席。GymOnlineService(Gym)-- プレイヤージムの挑戦スナップショット
PersistenceCloudSaveService(CloudSave)
LiveOpsEventService(Events)、LeaderboardService(Leaderboards)、AchievementService(Achievements)
ModdingModLoader(Mods)

その周辺に:NetworkedBattleManager(オンラインバトルのオーケストレーション)、PlayerNetworkEntity と PlayerSpawnManager(リモートプレイヤー)、AntiCheatManager、OnlineCommandBridge(オンラインの操作を、モンスターギフト のような CommandGraph ノードに橋渡しする)、OnlineSceneBootstrapper(オンラインシーンのライフサイクル)があります。

各サービスは、このセクションの専用ガイドで説明されています。

トラブルシューティング​

問題解決方法
"Connection refused"Nakama が動作していることを確認します(docker ps で確認)
"Invalid server key"OnlineConfig.ServerKey が Nakama の設定と一致していることを確認します
MCE_ONLINE のエラースクリプティング define シンボルが設定されていることを確認します
接続時のタイムアウトファイアウォールの設定を確認し、サーバーのホストとポートを確認します
"Module not found" の RPC エラーサーバー側の TypeScript モジュールをデプロイし、Nakama を再起動します
本番での SSL エラーUseSSL = true と有効な証明書を確認します

次のステップ​

バトルの結果を信用する前に種をシードする

デプロイしたばかりのサーバーは、あなたの種を知りません。仮のステータスで バトルを解決し、そのことを一切伝えません -- エラーも警告もありません。サーバーが計算するものを 判断する前に、次に 種のシーディング を行ってください。

  • 種のシーディング -- サーバーに本物の種データを与えます。
  • 認証 -- ユーザーアカウントとログインの流れを設定します。
  • ワールド同期 -- リアルタイムのマルチプレイヤーワールドを有効にします。
  • PvP バトル -- サーバー権威のオンラインバトル。
  • 経済 -- 取引、ショップ、通貨。
  • ワールドオプション -- ワールドがプレイされるルールを設定します。
  • GM モード -- 稼働中のサーバーを運用・テストします。