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

ネットワーキング

マルチプレイヤー体験は、VRChatの中核をなす要素です。プレイヤーの行動に反応し、プレイヤー間でデータを同期するワールドを作成するには、VRChatにおけるネットワーキングを理解する必要があります。

このガイドでは、ネットワーキングの核となる概念を紹介し、より深く学ぶための道筋を示します。

概要

VRChatのネットワーキングは、以下の3つの主要な概念に基づいて構築されています。

これらの核となる概念を理解することは、VRChatでネットワーク体験を構築する上で不可欠です。次節以降では、Variables、Events、Ownershipを効果的に使用する方法について詳しく解説します。

同期のための変数使用

利用可能な同期には2つのタイプがあります。

  1. Continuous(連続) – 値が頻繁に更新される場合に最適です(例:成長する木)。
  2. Manual(手動) – 常に正確である必要がある重要な値に最適です(例:スコアボード)。

The Variables window in an Udon Graph shows the variables you've created, and lets you edit their properties.

上記の画像では3つの異なる変数があり、'sliderValue'変数の「synced」ボックスにチェックが入っています。このGameObjectのOwner(オーナー)がこの変数の値を管理し、その変更が他の全員に送信されます。

例:同期スライダー

この例では、スライダーのOwnerが自身の値を他の全員に同期させます。これはあくまで概念を説明するためのものである点に注意してください。詳細な実装手順については、別途ガイドを公開する予定です。

スライダーの値は0から1の間の数値であり、これを浮動小数点数(floating point value)、略して float と呼びます。そこで、この値を保存および同期するための sliderValue という名前の変数を、float 型で作成します。

スライダーが動かされるたびにOwner側で sliderValue が更新されるように設定します。この変数はパッケージ化されて他の全員に送信され、受け取った側は自身の sliderValue 変数をそれに合わせて更新します。

変数をパッケージ化して送信する処理を Serialization(シリアライズ) と呼び、データを受信して展開することを Deserialization(デシリアライズ) と呼びます。

新しいプレイヤーがインスタンスに参加すると、ワールド内のすべての同期された変数がそのプレイヤーに送信され、他の全員と同じ状態が見えるようになります。

同期にイベントを使用する

変数とは異なり、イベントは残りません。発生した瞬間に消えてしまいます。前述の同期スライダーの例でイベントを使用した場合、インスタンスに新しく参加したプレイヤーのスライダーは同期されません。そのためイベントは、インスタンスに現在参加している全員に対して、即座に発生させたい事柄に適しています。

例:バブルガン

この例では、パーティクルシステムと、シャボン玉のワンドを回転させて泡のパーティクルを生成するアニメーターを持つオブジェクトを使用します。ワンドを持っているユーザーがトリガーを引いた際、ワールド内の全員に対してこの動作を実行したいとします。

Udon Graphでは、「Trigger」というカスタムイベントを作成し、そこで「Spin」アニメーションの再生と、22個のパーティクルの放出(Emit)を行っています。これはグラフ内のローカルなイベントです。

これを全員に対して実行するために、誰かがバブルガンを持って使用(Use)ボタンを押したときに発生する OnPickupUseDown イベントに接続します。そして、SendCustomNetworkEvent を使用し、ターゲットを All に設定することで、オブジェクトのオーナーを含む全員に対して「Trigger」イベントを発火させます。

Networked pickup particles in the Udon Graph

サンプルパッケージと次のステップ

これらの概念が実際にどのように動作するかを確認するには、以下のサンプルパッケージをダウンロードしてください。

UdonNetworkingConcepts.unitypackage

上記の内容を読み、サンプルを確認し終えたら、以下に進んでVRChatのネットワーキングについてさらに詳しく学習しましょう。

ネットワークに関するその他の概念

ネットワーク関連トピックの全リストについては、ナビゲーションバーを参照してください。

最終更新: