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 変数の値に応じてドアの開閉状態がアニメーションされます。
ディスカッション
コメント一覧
まだ、コメントがありません