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

Simple Pen システムは2つのプログラムで構成されています。1つはペン用、もう1つは描画される各線用です。

ペンと線の連携の仕組み

Pen

ペンには VRCPickup および VRCObjectSync コンポーネントが搭載されており、基本的な拾い上げと同期機能を提供しています。プログラム自体はこれらのコンポーネントと相性が良いため、Continuous sync を使用しています。

Lines

各線オブジェクトには LineRenderer と Manual Sync を設定したプログラムが組み込まれています。これは、ペンほど頻繁に更新する必要がないためです。線には Vector3 配列である points 変数があります。この変数は、インスタンス内の全員に対して線のデータを同期するための主要な手段となります。

描画の開始

誰かがペンを使用すると、そのペンの OnPickupUseDown が呼び出されます。これにより、プログラム内で以下の動作が発生します。

描画の継続

毎フレーム、ペンに対して Update イベントが呼び出され、以下のロジックが実行されます。

線側でこの OnUpdate メソッドが呼び出されると、プログラムは線上のポイントの現在位置を取得し、同期される points 変数を更新した上で、RequestSerialization を呼び出します。これは、Manual 同期された UdonBehaviour が VRChat に対して蓄積されたデータを送信するよう伝える方法です。このメソッドは線のオーナー側でのみ呼び出されます。その他のプレイヤーはデータを受信し、それぞれの OnDeserialization メソッドが呼び出されます。線側でこのメソッドがトリガーされると、プログラムは points 配列から位置情報を読み取り、それを使用して自身の線の位置を更新します。

描画の終了

ユーザーが Use ボタンを離すと、ペンに対して OnPickupUseUp イベントが呼び出されます。このイベントは単に isDrawing を false に設定し、対象となる線の UdonBehaviour に対して OnFinish を呼び出します。これにより、points データが全員に対して最新の状態であることを確認するために、OnUpdate メソッドがもう一度送信されます。

最終更新: