バーチャル3Dクリエイター神部まゆみです(*^-^*)
この記事はVRChat UdonのSendCustomNetworkEventとVRCObjectSyncで同期してみたメモです。
アバターじゃなくてワールドいじる話ね。
上手くできたら私のワールドに反映させたいですね。
動作確認した最新のバージョンはunity2022.3.22、VRChat SDK 3.9.0です。
なぜこれをいじるか?
ワールドでギミックを仕込んでも、同期する設定をしないとその人の画面でしか動かないらしい。
デフォルトだとローカルということ。
例えばVRC Pickupコンポーネントを追加すればオブジェクトを持てるようになるけど、


同期なしのローカルでは他の人の画面から見た時に動かないので、オブジェクトを他の人と投げ合ったりできないみたい。
公式ドキュメントやチュートリアル動画など
こちらの公式ページが参考になるかも。

公式のチュートリアル動画はこちらです。
同期の実験。デフォルトだとローカルで同期されていないのか?
今まで気にしてなかったけど、公式マニュアルを見たところデフォルトだとローカルって書いてあった。
ローカルだと自分がオブジェクトを動かしても他の人の画面には反映されないらしいので、ちょっと実験してみる。
クライアントを2にして実行するとテストできます。


あっホントだ!白い球を動かしてももう一つの画面では反映されない…。


ローカルとグローバル?みたいな設定があるのは知っていたけど、デフォルトで同期されているかと思っていたけど違ったみたい。
VRC Object Syncコンポーネントを追加すると同期できるっぽい
これ一個追加するだけでいいらしい。


おおマジだ…動いておる。


Interactのギミックも同期できる?
んー照明とスイッチにVRC Object Syncをつけてみたけどダメみたい。


VRC Object Syncはオブジェクトのトランスフォームやコライダーなど一部の情報しか渡せないっぽいです。
ちなみに照明については以前の記事を参照。
SendCustomNetworkEventをつけたらいけた
こんな感じにしたらいけた。


InteractしたことをSendCustomNetworkEventで全員に(all)送信している感じみたい。
その後はCustom Eventから繋いでいけばいいっぽい。
手順はこんな感じ。
何もないところでスペースキーを押すと検索バーが出せるけど、CustomEventはなぜか「EventCustom」と表記が逆になってるので注意。


先にCustomEventのところに名前をつけると(ここではTrigger)、SendCustomNetworkEventのEventNameにTriggerが指定できるので連携できてるっぽい。
これでちゃんと同期できた!


あれ、ここで詰まって時間食うかと思ったけどそうでもなかった。
まぁできたからいいか(;^_^A
ドアも同期できた
ドアも同期できました。
こちらもInteractだけど操作がSetBoolになってる。


ドアについてはこちら。
おわりに
案外簡単にできて良かった。
同期って難しいかと思ってたけどそうでもなかった。
まぁ複雑な動作をさせる場合は分からないけど、このくらいなら割とすぐできますね。
このあたりはちょっと奥が深そうなのでもう少しいじってみます(*^-^*)