vrchat 用ワールドの他人との同期メモ(オン・オフの切り替え)

やりたいこと

vrchat 用のワールドで、クリックするとランプが点灯するなどの仕掛けがあります。
物はアセットやBOOTHで入手したものを使用することができます。
ランプなど、クリックすると点灯する仕掛けがあるものもあります。

ランプをクリックしたり部屋の電気をつけた状態が他人の同じワールドにいる人からも同じ状態になっていてほしいことがあります。

cyan_trigger というのを入れることで、プログラミングやノードの操作(UDON)無しに作りこむことができます。

ゴール

2人でテスト用のワールドに入ってからネコミミの子がランタンをクリックしてランプをつけた状態です。
別のPCで別アカウントで同じワールドに入ってみて、ランタンが点灯しているのを確認したのが下の画像です。
後からワールドに入った人がランタンをクリックして消灯したり点灯したりしても、最初に入った人で見ても同期されているのを確認できました。

VCC でのワールド作成準備

VCC を使用してワールドを作成します。ここではUnity 2022ではなくて2019のほうで作成します。
cyan trigger が必要です。

BOOT のリンク https://booth.pm/ja/items/3194594
ここから、VCC 用に追加するためのリンクへ飛びます。真ん中下の VCC Listing のリンクを押します。


Add to VCC ボタンを押します。

VCCで作成したワールドのモジュールに cyan trigger を追加します(丸の+を押した後の状態)。

UNITY 側の設定

ワールドにPlane、スポーン地点となるシリンダーとテーブルを設置します。
VRCWorldの中のスポーン地点にシリンダーを追加します。

ランタンは灯が点灯しているモデルと消灯しているモデルを設置します。
位置を合わせるために「Lantern_group」という空オブジェクトを作り、その中に「Lantern_ON」と「Lantern_OFF」を入れ、それぞれの位置は0,0,0にして重ねています。
初期状態はLantern_OFF を表示し、Lantern_ON は非表示にします。
ランタンのろうそくの部分に球体を配置し、switch という名前にします。
switch の Mesh Renderer のチェックは外します。これをクリックすると点灯と消灯を切り替えることができるようにします。

Lantern_group に Add Component ボタンを押して、cyan trigger を追加します。
variables に bool 値を追加し、初期状態はFalseにsyncは「synced」にします。
Add Eventボタンを押して、Custom を追加します。

name には「_toggle」を入れます。以下の画像のようにします。
☆マークのValue -> bool -> bool.UnaryNegation を追加します。
on 変数の値を out bool on へ値を反転して出力します。

_lantern_on は今回使ってませんが設定を記載します(点灯処理)。
on の値をTrueにする処理です。
ランタンを点灯にするボタンがあればそのときのクリックでランタンを点灯させることができます。
(switchを押す側でNetworking.SetOwnerをしていたらここでは不要になります)。

_lantern_off は今回使ってませんが設定を記載します(消灯処理)。
on の値をFalseにする処理です。

cyan trigger で定義した on 変数の値が変化したら動く処理を記載します。
Anyone のところを Send To All にして他人へもイベントをおくります。

+ のspecial から If と Else を追加して配置します。
☆ のValue から bool -> bool.Equality を追加して、画像のように設定します。
処理内容は on の変数が True ならLantern_ON をGameObject.SetActive で表示し、Lantern_OFFをGameObject.SetActiveで非表示にしています。
Else 側はGameObject.SetActiveを使用して、Trueの時とは逆の状態にします。

非表示になっている球体をクリックしたときの処理

球体のインスペクタのSphere Collider の「Is Trigger」のチェックをいれます。
Add Eventから追加して Interract を指定します。
Action に Networking.SetOwner とSendCustomEventを追加します。
SendCustomEventのInputには「Lantern_group」を指定します(ヒエラルキーから入力欄にドラッグして指定します)。
event name には一覧から「_toggle」を選択します。
球体をクリックすると「Lantern_group」に「_toggle」イベントが送信されます。
_toggle イベントの中で on 変数の値を反転してセットします。
on 変数の値が設定されたら、すべての人に on 変数を同期します。
on 変数の値に応じてランタンの表示状態が設定されます。

VR,VRChat,VRCSDK3

Posted by mhwp-admin