unity-netcode について
unity-netcode は、Unity Netcode for GameObjects のマルチプレイヤー設定と操作を行うスキルモジュールです。NGO 開発者向けに、マネージャー、通信、ネットワークオブジェクト、実行制御とバージョン確認を提供します。
主な機能
- 01パッケージ、マネージャー、プレハブ設定の検証
- 02NetworkManager とトランスポートの作成・設定
- 03NetworkObject とプレハブリストの管理
- 04ネットワーク変換・物理・アニメーター・スクリプトテンプレートの追加
- 05PlayMode での状態確認とネットワーク制御
活用シーン
- 01マルチプレイヤープロジェクト用 NetworkManager の構築
- 02直接接続または Relay トランスポートの設定
- 03ネットワークプレハブの登録とプレイヤープレハブの指定
- 04実行時の接続状態確認やクライアント起動
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-netcodeインストール後、Claude Code で/unity-netcodeを入力して読み込まれたか確認します。
詳細
このモジュールのスキルを呼び出す前に: スキル名や説明から推測したパラメーターでスキルを呼び出そうとしている場合は、いったん停止し、先にこのファイルを読むか、
GET /skills/recommend?includeSchema=trueでスキーマを取得してください。recommend/schema からすでにパラメーター定義を取得している場合は、そのまま dryRun に進めます。
トリガー
- マルチプレイヤーのスキャフォールディング
- ネットワークプレハブの登録
- スポーンロジックの接続
- host/server/client の起動
- マルチプレイヤーの構築、ネットワークプレハブの登録、スポーンロジックの接続、host/server/client の起動
Unity Netcode for GameObjects スキル
Netcode for GameObjects(NGO)のマルチプレイヤー設定と操作を自動化します。すべてのスキルは NGO 2.x のソースに基づいて検証されています。パッケージが存在しない場合、各スキルはインストール手順を含む NoNetcode() エラーを返します。一部のスキルでは NGO 2.5.0 以降も必要です(NGO 2.5+ の機能を参照)。2.x の古いバージョンでは、コンパイルエラーの代わりに、構造化された「requires 2.5.0+」エラーが返されます。これは、AttachableBehaviour/AttachableNode/ComponentController が専用のバージョンシンボルではなく、リフレクションによって検出されるためです。
必須:
com.unity.netcode.gameobjects(2.x)、Unity 6000.0 以降。 強く推奨:netcode_*スキルを呼び出す前に、netcode-design を読み込んでください。NGO のライフサイクルと権限のルールは厳格であり、スキルだけでは誤ったビジネスコードを防げません。
ガードレール
動作モード(v1.9 の 3 段階):
-
Approval(デフォルト):クエリ/一覧/情報取得のスキル(
netcode_check_setup、netcode_get_manager_info、netcode_get_transport_info、netcode_list_network_objects、netcode_get_network_object_info、netcode_list_network_prefabs、netcode_list_network_behaviours、netcode_get_spawn_manager_info、netcode_get_scene_manager_info、netcode_get_status、netcode_version、netcode_attachable_info)は直接実行されます。ミューテーター(作成/構成/アタッチ/追加)は FullAuto です。MODE_RESTRICTEDの場合は、許可付与プロトコルを実行します。 -
Auto/Bypass:SemiAuto と FullAuto は直接実行されます。
-
このモジュールで Auto が禁止されている操作:
SkillOperation.Delete→netcode_remove_manager、netcode_remove_network_object、netcode_remove_from_prefabs_listMayTriggerReload = true→netcode_add_network_behaviour_script(新しい.csを書き込み、スクリプトのコンパイルとドメインリロードを強制します)MayEnterPlayMode = true→netcode_start_host、netcode_start_server、netcode_start_client、netcode_shutdown
これらを実行できるのは、Bypass モードか、ユーザーが管理する Allowlist エントリーを介した場合のみです。許可付与フローは
MODE_FORBIDDENを返します。ランタイム制御と Behaviour スクリプト生成が、このモジュールに制限が設けられている実質的な理由です。 -
com.unity.netcode.gameobjectsがない場合、すべてのスキルはインストール手順を含むNoNetcode()エラーを返します。
禁止事項(よくある誤った思い込み):
netcode_spawn_object/netcode_spawn_playerは存在しません。スポーンはランタイムコード(NetworkBehaviour)内で.Spawn()またはNetworkManager.SpawnManager.InstantiateAndSpawnを介して行う必要があります。スポーンには実行中の NetworkManager が必要なため、スキルではスポーンを代行しません。netcode_register_sceneは存在しません。シーンの登録は Build Settings とEnableSceneManagementを通じて行います。このモジュールが提供するのは、設定の読み書きを行うnetcode_configure_scene_managementのみです。- 独立したスキルとしての
netcode_set_tick_rate/netcode_set_protocolは存在しません。NetworkConfig の編集にはすべてnetcode_configure_managerを使用してください。 netcode_start_hostが Edit Mode で動作すると想定しないでください。すべてのランタイム制御スキルには PlayMode が必要です。netcode_add_to_prefabs_listがNetworkObjectコンポーネントを自動的にアタッチすると想定しないでください。先にnetcode_add_network_objectを呼び出してください。
ルーティング:
- GameObject 階層を通常どおり作成する →
gameobject - NetworkObject/NetworkTransform/その他のネットワーキングコンポーネントをアタッチする → このモジュール
- 一般的なプレイヤープレハブのコンポーネント(Rigidbody/Collider/Animator) →
component - ランタイムのシーン切り替え(LoadScene) → 生成された NetworkBehaviour から
NetworkManager.SceneManager.LoadSceneを呼び出します。このモジュールでは実行しません。 - コードレベルの設計判断(RPC の方向、NetworkVariable の権限) → アドバイザリの netcode-design
オブジェクトの指定
netcode_add_*/netcode_configure_* スキルでは、通常のターゲットパラメーターを使用します。
name— シーンオブジェクト名instanceId— Unity の InstanceID(完全一致)path— 階層パスParent/Child
同名のオブジェクトが存在する可能性がある場合は、instanceId を優先してください。
スキル
セットアップと検証
| スキル | 目的 | 主なパラメーター |
|---|---|---|
netcode_check_setup | パッケージ、NetworkManager、Transport、PlayerPrefab、PrefabsList の整合性を検証します | verbose? |
netcode_create_manager | NetworkManager と UnityTransport を作成します | name? |
netcode_configure_manager | NetworkConfig を一括編集します(TickRate、ConnectionApproval、EnableSceneManagement、NetworkTopology など) | name?、省略可能なフィールド 15 個以上 |
netcode_get_manager_info | NetworkConfig とランタイム状態を読み取ります | name? |
netcode_remove_manager | NetworkManager を削除します(事前に Shutdown されている必要があります) | name? |
トランスポート
| スキル | 目的 | 主なパラメータ |
|---|---|---|
netcode_set_transport_address | 直接接続: Address / Port / ServerListenAddress を設定 | address、port、serverListenAddress? |
netcode_set_relay_server_data | リレーモード (直接接続とは排他的) | address、port、allocationIdBase64、keyBase64、connectionDataBase64、hostConnectionDataBase64?、isSecure? |
netcode_set_debug_simulator | レイテンシ / ジッター / パケットロスをシミュレート (開発専用) | packetDelay、packetJitter、dropRate |
netcode_get_transport_info | 現在のトランスポート情報を読み取る | name? |
NetworkObject
| スキル | 目的 | 主なパラメータ |
|---|---|---|
netcode_add_network_object | GameObject に NetworkObject をアタッチ | name/instanceId/path + NetworkObject のフィールド |
netcode_configure_network_object | 既存の NetworkObject のフィールドを変更 | 上記と同じ |
netcode_remove_network_object | NetworkObject を削除 (現在スポーンされていない必要があります) | 上記と同じ |
netcode_list_network_objects | シーン内のすべての NetworkObject を一覧表示 (実行時の状態を含む) | includeInactive? |
netcode_get_network_object_info | 単一の NetworkObject を詳細に照会 | 上記と同じ |
NetworkPrefabsList
| スキル | 目的 | 主なパラメータ |
|---|---|---|
netcode_create_prefabs_list | NetworkPrefabsList アセットを作成 | path、assignToManager? |
netcode_add_to_prefabs_list | プレハブを追加 (任意のオーバーライド: None/Prefab/Hash) | listPath、prefabPath、overrideMode?、... |
netcode_remove_from_prefabs_list | プレハブのエントリを削除 | listPath、prefabPath |
netcode_list_network_prefabs | すべてのエントリをそのハッシュとともに一覧表示 | listPath |
netcode_set_player_prefab | NetworkConfig.PlayerPrefab を設定 | prefabPath、name? |
コンポーネント
| スキル | 目的 | 主なパラメータ |
|---|---|---|
netcode_add_network_transform | 軸同期トグル付きで NetworkTransform をアタッチ | target + 15 個の任意フィールド |
netcode_configure_network_transform | 既存の NT のフィールド / しきい値を編集 | PositionThreshold などを含む |
netcode_add_network_rigidbody | NetworkRigidbody / NetworkRigidbody2D をアタッチ | useRigidbody2D?、useRigidBodyForMotion? |
netcode_add_network_animator | NetworkAnimator をアタッチ (Animator が必要) | target |
netcode_add_network_behaviour_script | NetworkBehaviour スクリプトテンプレートを生成 (OnNetworkSpawn/Despawn + 任意の RPC/NetworkVariable/Ownership/NGO 2.5+ OnNetworkPreDespawn) | className、path、includeRpc?、includeNetworkVariable?、includeOwnershipCallbacks?、includePreDespawn? |
netcode_list_network_behaviours | シーン内の NetworkBehaviour サブクラスのインスタンスを一覧表示 | includeInactive? |
シーン & スポーン照会
| スキル | 目的 |
|---|---|
netcode_configure_scene_management | EnableSceneManagement / LoadSceneTimeOut / ClientSynchronizationMode を設定 |
netcode_get_spawn_manager_info | 実行時: SpawnedObjects を一覧表示 |
netcode_get_scene_manager_info | 実行時: シーンのロード状態を読み取る |
実行時制御 (PlayMode が必要)
| スキル | 目的 |
|---|---|
netcode_start_host | Host を開始 |
netcode_start_server | Server を開始 |
netcode_start_client | Client を開始 |
netcode_shutdown | シャットダウン (任意の discardMessageQueue) |
netcode_get_status | IsHost / IsServer / IsClient、LocalClientId、ConnectedClients、NetworkTime を読み取る |
NGO 2.5+ の機能 {#ngo-25-features}
Netcode for GameObjects 2.5.0 で追加されました(パッケージの CHANGELOG、PR #3518 で確認済み)。AttachableBehaviour / AttachableNode は、従来の NetworkObject の親子関係における問題を回避する、別方式の「アタッチ」親子関係システムです。ComponentController は、コンポーネントのリストの有効/無効状態をネットワーク同期します。NGO 2.0~2.4.x(NETCODE_GAMEOBJECTS は引き続き有効ですが、これらの型はまだ存在しません)では、以下の各スキルは失敗する代わりに、構造化された requires 2.5.0+ エラーを返します。最初に netcode_version を呼び出して確認してください。
| スキル | 目的 | 主なパラメーター |
|---|---|---|
netcode_version | インストール済みの NGO のバージョンと 2.5+ の機能の利用可否を報告します | — |
netcode_attachable_info | シーン内の AttachableBehaviour / AttachableNode / ComponentController の分布を監査します | includeInactive? |
netcode_attachable_add | NetworkObject の子階層にある GameObject に AttachableBehaviour をアタッチします | target + autoDetach?(None/OnAttachNodeDestroy/OnDespawn/OnOwnershipChange、カンマ区切り) |
netcode_attachable_node_add | AttachableNode(AttachableBehaviour がアタッチするソケット)をアタッチします | target + detachOnDespawn? |
netcode_component_controller_add | GameObject に ComponentController をアタッチします | target + startEnabled? |
netcode_component_controller_configure | StartEnabled を設定し、または target GameObject から同期対象のコンポーネントリストを設定します(Inspector の Components フィールドに GameObject をドラッグする操作に相当します) | target、targetPaths?、clearExisting?、startEnabled? |
注意事項:
AttachableBehaviourは、NetworkObject自身の GameObject に直接ではなく、その階層内にある子 GameObject に配置する必要があります。AttachableNodeは、それにアタッチするAttachableBehaviourインスタンスとは異なるNetworkObjectに属している必要があります。Attach()/Detach()は実行時専用の呼び出しです(両方のインスタンスがスポーン済みである必要があります)。意図的にスキルとして公開していません。理由は上記の DO NOT と同じです。netcode_spawn_objectが存在しないのと同様、呼び出し元には実行中の NetworkManager が必要であり、NetworkBehaviour のコードから実行する必要があります。netcode_component_controller_configureのtargetPathsは GameObject 全体を受け付けます。NGO 独自のOnValidate()(このスキルによって呼び出されます)は、それぞれの GameObject を、public なbool enabledプロパティを持つ対象の子コンポーネントすべてに展開し、NetworkBehaviour/NetworkObject/NetworkManagerはスキップします。これは、Inspector の Components フィールドに GameObject をドラッグした場合と同じ動作です。OnValidate()が存在しない場合、または例外をスローした場合、応答にはwarningが含まれ、項目は展開されません。
クイックスタート
import unity_skills as u
# 1. Inspect current state
u.call_skill("netcode_check_setup")
# 2. Create NetworkManager + UnityTransport
u.call_skill("netcode_create_manager", name="NetworkManager")
# 3. Configure the NetworkConfig
u.call_skill("netcode_configure_manager",
tickRate=30,
connectionApproval=False,
enableSceneManagement=True,
networkTopology="ClientServer")
# 4. Transport
u.call_skill("netcode_set_transport_address",
address="127.0.0.1", port=7777, serverListenAddress="0.0.0.0")
# 5. Player prefab setup
# NOTE: add_network_object on a prefab path depends on GameObjectFinder support.
# Safer route: instantiate the prefab in the scene first, then attach.
u.call_skill("netcode_add_network_object", path="Assets/Prefabs/Player.prefab")
u.call_skill("netcode_create_prefabs_list", path="Assets/NetworkPrefabs.asset")
u.call_skill("netcode_add_to_prefabs_list",
listPath="Assets/NetworkPrefabs.asset",
prefabPath="Assets/Prefabs/Player.prefab")
u.call_skill("netcode_set_player_prefab", prefabPath="Assets/Prefabs/Player.prefab")
# 6. Generate a NetworkBehaviour template
u.call_skill("netcode_add_network_behaviour_script",
className="PlayerController",
path="Assets/Scripts/PlayerController.cs",
includeRpc=True, includeNetworkVariable=True)
# 7. Drive the session in PlayMode
u.call_skill("editor_play") # enter PlayMode
u.call_skill("netcode_start_host")
u.call_skill("netcode_get_status")
u.call_skill("netcode_shutdown")
u.call_skill("editor_stop")
重要なルール(必ずお読みください)
- Spawn/Despawn はスキルとして公開されていません。 サーバー権限の NetworkBehaviour 実行時コードから呼び出す必要があります。スキルが扱うのは、プレハブの登録と NetworkManager のライフサイクルのみです。
- PlayerPrefab は NetworkPrefabsList に含まれている必要があります(2.x では実行時に検証されます)。
netcode_add_to_prefabs_listで登録してください。 - 実行時制御スキル(start_*/shutdown)には PlayMode が必要です。 Edit Mode から呼び出すとエラーが返されます。
- Address と ServerListenAddress の意味は異なります。 クライアントでは、
Addressは接続先サーバーの IP です。サーバーでは、ServerListenAddressはバインドアドレスです(通常は0.0.0.0)。 useRigidbody2Dは NetworkRigidbody と NetworkRigidbody2D を切り替えます。関連しない物理設定(例:Physics2D.AutoSyncTransforms)は別の場所で設定します。
対象バージョン
NGO 2.x(2.13.1 で検証済み)を対象としています。従来の 1.x(古いプレハブリストの構成、異なる RPC モデル)は、このモジュールの対象外です。NGO 2.5+ の機能のスキルには、対象範囲内で 2.5.0 以降が必要です。利用する前に netcode_version を呼び出して確認してください。
正確なシグネチャ
正確なパラメーター名、デフォルト値、戻り値のフィールドについては、GET /skills/schema または unity_skills.get_skill_schema() に問い合わせてください。このドキュメントはルーティングとベストプラクティスのガイドであり、シグネチャの正式な情報源ではありません。