VRChat 非公式日本語ドキュメント

Network ID Utility

ネットワークIDとは、ネットワーク通信を行う際にどのオブジェクトがどれであるかを識別するための識別子です。ほとんどの場合、これを意識する必要はありませんが、プレイヤーが技術的に異なる2つのワールドバージョンを読み込む可能性があるクロスプラットフォーム対応ワールドを作成する際には問題になることがあります。

ネットワークIDは、それら異なるバージョン間を関連付けることで、全員が同じものを確認し、データが正しいオブジェクトに送信されるようにする役割を担っています。

具体的に説明すると、ネットワークIDはGameObjectに割り当てられた単なる番号です。例えば、ID 1のビーチボールとID 2のアイスクリームがあるとします。もしこれらが入れ替わってしまった場合、自分がビーチボールを蹴っているつもりが、他の人にはアイスクリームを蹴っているように見えてしまうといった事態が発生する可能性があります。

こうした潜在的な問題を解決し、異なるシーン間での同期を維持するために、ネットワークIDユーティリティを作成しました。

Network ID Import and Export Utility

このユーティリティを使用すると、ネットワークIDを保存し、シーンやプロジェクト間で転送することができます。この機能はUnity Editorの VRChat SDK/Utilities/Network ID Import and Export Utility から利用可能です。

このユーティリティが必要となるのは、クロスプラットフォーム対応のワールドを開発しており、各プラットフォーム向けのバージョンが異なるシーンやプロジェクトに分かれている場合のみです。

network-id-utility-image1.png

このツールを使用すると、シーン全体に含まれるすべてのNetwork IDの一覧が表示されます。まだリストがない場合は、Regenerate Scene IDsをクリックしてください。

network-id-utility-image4.png

あるシーンから別のシーンへNetwork IDを転送する準備ができたら、Exportボタンをクリックしてファイルを保存してください。その後、別のシーンに移動してImportをクリックし、保存したファイルを選択します。

このツールは、各オブジェクトのNetwork IDをシーンの階層パスとしてエクスポートします。例:{"10":"/CubePickup", "11":"/Prefabs/SyncedPen"}

ネットワークIDをシーンにインポートする際は、各ネットワークオブジェクトへのパスが同一であることを確認してください。ネットワーク非同期のオブジェクトはシーン間で異なっていても問題ありませんが、同期が必要なオブジェクトと競合しないように注意してください。

警告

ネットワーク対応のゲームオブジェクト名には、前方スラッシュ / を使用しないでください。ゲームオブジェクトのパスは前方スラッシュを区切り文字として使用するため、予期せぬ動作を防ぐために使用を避けてください。

network-id-utility-image5.png

2つのシーン間で全てが一致していれば、Accept All ボタンのついた大きなブロックが表示されます。そのボタンをクリックすれば設定完了です。

競合の解決

このユーティリティにはいくつかの競合解決ツールが用意されています。競合をスキャンするには Scan For Conflicts ボタンを押すか、Auto Scan にチェックを入れてシーンでの作業中に継続的にスキャンを行ってください。

network-id-utility-image3.png

以下は、ファイル内には存在するもののシーン内には存在しないオブジェクトの例です。ファイルにはこのパスにネットワークIDがあると記載されていますが、そのパスを持つオブジェクトが見つかりません。この時点で、無視するか、別のオブジェクトを指定するかを選択できます。そのオブジェクトがこのシーンに存在する必要がないと確信している場合は、安全に無視して問題ありません。しかし、もしシーンに存在するはずのオブジェクトで、単に名前が異なっているだけであるなら、そのオブジェクトを選択してください。この競合を解決すると、ネットワークIDを承諾できるセクションへ移動します。

network-id-utility-image2.png

これは、あるオブジェクトが自身のネットワークIDを20と主張している一方で、ファイル側では別のパスが20であるべきだと示しているような例です。

このような状況やその他の多くの不自然な事態は、新しいファイルをインポートする前にシーン内に既存のネットワークIDが存在している場合にのみ発生します。シーン間でIDをコピーする場合は、この問題を避けるためにインポート前にIDをクリアしておくのが一般的です。ただし、既存のネットワークIDを壊さずにシーンの修復を試みるなど、非常に特殊な作業が必要な場合に備えて、これらのオプションが用意されています。

これらの競合を解決する必要がある場合は、「Ignore All」ボタンをクリックしてシーンに一切変更を加えないか、あるいはどのオブジェクトにIDを割り当てるかを個別に選択することができます。「Select」ボタンをクリックすると、選択したオブジェクトにIDを適用することで競合が解決されます。これにより1つまたは複数の競合が解消されるため、1つ解決しただけで多くの競合が消えても驚かないでください。

最終更新: