vrchat 用ワールドの他人との同期メモ(ドアのオープン・クローズのアニメーション)

やりたいこと

vrchat 用のワールドで、建物のドアのオープン・クローズの状態が他人の同じワールドにいる人からも同じ状態になっていてほしいことがあります。
cyan_trigger というのを入れることで、プログラミングやノードの操作(UDON)無しに作りこむことができます。

ゴール

別の人が開けたドアの状態が反映されていること。後からJoinしてきてもその状態が反映されていること。

 

VCC でのワールド作成準備

「vrchat 用ワールドの他人との同期メモ(オン・オフの切り替え)」の記事にありますので参照してください。

UNITY 側の設定

Unitのアセットストアから購入したModular Cabin をここでは使っています。コライダーも設定されており、床とか壁を移動したり追加したりして広くすることができます。
ドアにアニメーションを作成します。ドアが閉じるアニメーションとドアが開くアニメーションを別途作成します。

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

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

cyan trigger で定義した door 変数の値が変化したら動く処理を記載します。
OnVariableChanged を追加します。
Anyone のところを Send To All にして他人へもイベントをおくります。
SDK2をクリックして Animator.SetBool のアクションを追加します。
cyan trigger の door 変数の値を animator の door 変数へ反映します。

door_close から door_open へは door が True になったときに遷移します。
door_open から door_close へは door が False になったときに遷移します。
アニメーションのループはFalseにしておきます。

ドアのノブをクリックしたときの処理

Add Eventから追加して Interract を指定します。
Action に Networking.SetOwner とSendCustomEventを追加します。
SendCustomEventのInputには「Cabin_Door」を指定します(ヒエラルキーから入力欄にドラッグして指定します)。
event name には一覧から「_toggle」を選択します。
ドアのノブをクリックすると「Cabin_Door」に「_toggle」イベントが送信されます。
_toggle イベントの中で on 変数の値を反転してセットします。
on 変数の値が設定されたら、すべての人に on 変数を同期します。
on 変数の値に応じてドアの開閉状態がアニメーションされます。

Uncategorized

Posted by mhwp-admin