godot-multiplayer-networking について
Godot のマルチプレイヤー開発者向けネットワークスキルです。ホストとクライアントの設定、同期、安全な RPC、ロールバックのスクリプトパターンを扱い、サーバー権威、帯域制御、大規模ワールドの関心領域管理を重視します。
主な機能
- 01ENet のホスト・クライアント設定
- 02サーバー権威と安全な RPC
- 03適応型同期制御と小型パケット
- 04クライアント予測・補正・ロールバック
- 05可視グリッドによる関心領域管理
- 06LAN 検出と接続監視
活用シーン
- 01専用または LAN マルチプレイヤーホストの構築
- 02共有状態の検証と RPC 通信量の制限
- 03位置同期の帯域使用量の削減
- 04大規模ワールドでのネットワーク対象の絞り込み
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-multiplayer-networkingインストール後、Claude Code で/godot-multiplayer-networkingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/migration-notes.mdrpc-lobby-and-sync.mdscripts/client_network_setup.gdclient_prediction_synchronizer.gdgame_state_sync_manager.gdmultiplayer_spawner_manager.gdnet_adaptive_sync_throttle.gdnet_anti_desync_reconciler.gdnet_custom_id_mapper.gdnet_enet_expert_config.gdnet_headless_server_auto_start.gdnet_heartbeat_monitor.gdnet_lan_discovery.gdnet_packet_bit_packer.gdnet_packet_rate_limiter.gdnet_rollback_helper.gdnet_visibility_grid_culling.gdnetwork_error_handler.gdnetwork_input_synchronizer.gdnetworked_interpolator.gdpacket_peer_latency_test.gdsecure_variable_synchronizer.gdsecured_rpc_pattern.gdserver_authoritative_controller.gdserver_dedicated_host.gd詳細
絶対にやってはいけないこと(ネットワーキング上級者向けルール)
コアアーキテクチャ
- 高頻度データ(位置/移動)に
Reliableを絶対に使わないでください — Reliable パケットは確認応答があるまで後続のすべてのパケットをブロックします(Head-of-Line ブロッキング)。UnreliableOrderedを使用してください。 - 共有状態(体力/お金/インベントリ)について、クライアントを絶対に信用しないでください — クライアントはアクションを提案するだけにしてください。サーバーは必ず結果を検証してブロードキャストする必要があります。
- サーバーの IP を絶対にハードコードしないでください — 常にディスカバリー(
net_lan_discovery.gd)を可能にするか、CLI/UI 経由で IP を渡してください。
パフォーマンスと帯域幅
- 同じデータを毎フレーム絶対に送信しないでください —
net_adaptive_sync_throttle.gdを使用して、状態が大きく変化した場合、または一定の Hz 間隔(例:20Hz)でのみ更新を送信してください。 - 高速同期に
JSONを絶対に使用しないでください — 文字列のシリアライズは通信時のデータ量が非常に大きくなります。ビットパッキング(net_packet_bit_packer.gd)を使用して、パケットを 100 バイト未満に抑えてください。 - 必要がない場合、すべてのピアに絶対にブロードキャストしないでください — 大規模なワールドでは、インタレスト管理(
net_visibility_grid_culling.gd)を使用してください。森にいるプレイヤーが、街にいるプレイヤーの位置を知る必要はありません。
セキュリティ
- 毎秒の RPC 呼び出し回数に絶対に上限を設けてください — 攻撃者は 1,000 件の「Attack」RPC をサーバーに送りつけ、ゲームをクラッシュさせる可能性があります。
net_packet_rate_limiter.gdを使用してください。 - PeerID を絶対にエンドユーザーに公開しないでください — PeerID は内部用です。必ず、データベースの永続的な
UserIDsにマッピングしてください(net_custom_id_mapper.gd)。 - GUI を有効にした状態で専用サーバーを絶対に実行しないでください —
--headless(net_headless_server_auto_start.gd)を使用してリソースを節約し、安定性を確保してください。
デシジョンツリー(トランスポート/権限/同期 Hz)
| 質問 | 推奨 | スクリプト |
|---|---|---|
| デスクトップ/コンソールの LAN または専用 UDP | ENet | 必須 net_enet_expert_config.gd |
| ブラウザー/NAT の影響を受けやすいピア | WebRTC(または WebSocket フォールバック) | 公式ドキュメント+ピアラッパー。安全な RPC スクリプトも引き続き使用してください |
| ゲームプレイの状態を管理するのは誰ですか? | サーバー権威型 | 必須 server_authoritative_controller.gd |
| GUI のない専用ホスト | --headless | 必須 net_headless_server_auto_start.gd / server_dedicated_host.gd |
| 位置の同期は 10~20 Hz。毎フレームは不可 | アダプティブスロットリング | 必須 net_adaptive_sync_throttle.gd |
読み込まないでください — メモリからロビー/RPC の初心者向けレシピを読み込まず、以下のゴールデンパスを使い、該当するスクリプトだけを開いてください。
ゴールデンパス
- ホスト/専用サーバー → server_dedicated_host.gd + net_headless_server_auto_start.gd。クライアント → client_network_setup.gd。
- セキュアな RPC → secured_rpc_pattern.gd + net_packet_rate_limiter.gd + secure_variable_synchronizer.gd。
- 予測/リコンサイル → client_prediction_synchronizer.gd + net_anti_desync_reconciler.gd。戦闘/ロールバックの場合 → net_rollback_helper.gd。
- インタレストカリング → 位置をブロードキャストする前に net_visibility_grid_culling.gd を使用してください。
利用可能なスクリプト
トランスポートとホスト
- net_enet_expert_config.gd — チャネル、圧縮、帯域幅。
- net_headless_server_auto_start.gd — CLI/
--headlessの検出。 - server_dedicated_host.gd — 専用ホストの起動処理。
- client_network_setup.gd — クライアントのピア参加。
- net_lan_discovery.gd — UDP LAN 検出。
- network_error_handler.gd — 切断/エラーのルーティング。
- packet_peer_latency_test.gd — レイテンシのプローブ。
- net_heartbeat_monitor.gd — RTT/ジッター。
権限、RPC、同期
- server_authoritative_controller.gd — サーバーがアクションを検証します。
- secured_rpc_pattern.gd — 安全な RPC アノテーション/パターン。
- secure_variable_synchronizer.gd — サーバー所有の変数。
- net_packet_rate_limiter.gd — フラッド攻撃対策。
- net_packet_bit_packer.gd — コンパクトなペイロード(頻繁に実行される処理経路では JSON を使いません)。
- net_adaptive_sync_throttle.gd — Hz/変更しきい値に基づく同期。
- game_state_sync_manager.gd — スナップショット/状態の同期。
- multiplayer_spawner_manager.gd — スポーン権限。
- network_input_synchronizer.gd — 入力フレームをサーバーに送信します。
- networked_interpolator.gd — リモートエンティティの平滑化。
- net_custom_id_mapper.gd — UserID ↔ PeerID。
非同期/ロールバック/関心領域
- client_prediction_synchronizer.gd — 予測と補正。
- net_anti_desync_reconciler.gd — 強制補正。
- net_rollback_helper.gd — スナップショット再シミュレーション用ヘルパー。
- net_visibility_grid_culling.gd — 関心領域管理。
エキスパート向けのヒント
- 位置/移動:
UnreliableOrderedとスロットリングを使用します。毎フレーム reliable で送信してはいけません。 - クライアントは提案し、サーバーが検証して結果をブロードキャストします。
- 大規模なワールドでは、同期 Hz を増やす前に可視性グリッドでカリングします。
詳細(必要に応じて)
- RPC モード、ロビーのハンドシェイク、パペット補間 → rpc-lobby-and-sync.md
- 差分圧縮とネットワークシミュレーターの概念については、このリファレンスを参照してください(LLM の知識不足:unreliable と reliable の HoL ブロッキングの違いは一般的な知識ではありません)。
リファレンス
段階的な情報開示:特定の API を調べる場合にのみ公式ドキュメントへのリンクを開いてください。関連するスキルにルーティングする場合は、関連スキルを読み込んでください。知識の全領域を事前に読み込まないでください。
公式ドキュメント
- ハイレベルマルチプレイヤー — RPC モード、オーソリティ、ピアのライフサイクルを理解し、ホスト/参加ロビーやサーバー検証済みアクションを実装します。
- ネットワーキング — トランスポートの一覧(ENet/WebSocket/WebRTC/HTTP)を参考に、プラットフォームや NAT の制約に合ったピアを選びます。
- MultiplayerAPI —
multiplayerシングルトン:ピア ID、接続シグナル、rpc/rpc_idの呼び出し口を扱います。 - MultiplayerPeer — すべてのバックエンドで共通する転送モード(信頼性あり/なし/順序なし)と接続ステータスを扱います。
- ENetMultiplayerPeer — LAN、専用サーバー、多くのアクションゲームで使われる UDP ホスト/クライアントピアです。
- SceneMultiplayer — デフォルトの MultiplayerAPI:ルートパス、認証コールバック、シーンツリーの RPC ルーティングを扱います。
- MultiplayerSpawner — スポーン/デスポーンのレプリケーションにより、途中参加者も同じネットワーク化されたシーングラフを共有できます。
- MultiplayerSynchronizer — アドホックな位置 RPC に代わる、プロパティのレプリケーション、変更時の差分、可視性フィルターを扱います。
- Node — 入力と共有状態の所有権ルールとして、
set_multiplayer_authority/is_multiplayer_authorityを扱います。 - PacketPeerUDP — ハイレベルなマルチプレイヤーピアの外部で、LAN 検出ブロードキャストに使う UDP の生の送受信を行います。
- WebRTC — ENet UDP だけではファイアウォールを通過できない場合に使う、ブラウザー対応の P2P 接続方法です。
- コマンドラインチュートリアル — 専用サーバーの起動や複数インスタンスのテストに使う
--headlessと CLI フラグを扱います。
関連スキル
前提条件
- godot-project-foundations — ホスト/参加機能や専用サーバーのビルドに必要な、プロジェクトの構成、Autoload、エクスポート/機能フラグを扱います。
- godot-gdscript-mastery — セキュアな RPC やビットパッカーで使う、型付きの
@rpcアノテーション、Callable、PackedByteArray のパターンを扱います。 - godot-input-handling — InputMap の読み取りをシミュレーションから分離し、クライアントが意図を送信して、オーソリティが結果を管理する方法を扱います。
補完
- godot-adapt-single-to-multiplayer — このスキルのロビー/RPC/ENet ツールキットを適用する前に、移行の形(オーソリティの分割、予測用のシェル)を確認します。
- godot-autoload-architecture — ホスト/参加や再接続のフロー中、シーン変更後も存続するセッション/ロビー用 Autoload。
- godot-signal-architecture — トランスポート RPC から分離されたままの、ローカルのピア接続/ロビーイベント。
- godot-server-architecture — オーソリティによるシミュレーションで使用する、ヘッドレスホストの基盤と PhysicsServer/RID パターン。
- godot-export-builds — 実際の複数インスタンステストに使う、専用サーバーのエクスポートプリセットと CLI パッケージング。
- godot-debugging-profiling — localhost では決して発生しない同期バグを検出する、RTT/ジッターのオーバーレイとリモートデバッグの手法。
- godot-save-load-systems — PeerID を永続的な識別子として扱わずに、UserID、ロビー設定、再接続トークンを永続化します。
下流/利用側
- godot-performance-optimization — ピア負荷によって帯域幅/CPU の予算を超過した場合に、レプリケーション Hz と関心領域のカリングを制限します。
- godot-monte-carlo-balancer — ネットコードの変更で実効的な武器のタイミングやアビリティの有効時間が変わった後に、経済バランス/TTK を再調整します。
- godot-genre-battle-royale — BR 規模での、多数のピアに対応する関心管理と途中参加時のスナップショット。
- godot-genre-moba — マルチプレイヤーアリーナ向けの、固定ティックのオーソリティ、アビリティ RPC、観戦に安全な状態同期。
マスター
- godot-master — ライブラリのルーターとミラーされたモジュールのエントリ。複数の領域にまたがるネットワーク上の課題をどのドメインスキルが担当するか調べるときに開きます。
コメント
Markdown 対応