VRChat 立った状態でsitできる椅子(スケートボード)を作りました

*********************************************************************************
* 注意 *
この記事で記述している内容は古く、2023年以降では非推奨な方法が書かれています。参考として記事は残してありますが新しくワールド作成する場合には他の記事を参考にしたほうがよいです。
*********************************************************************************

こんにちは!Klueleです。
最近スケートボードに乗れるワールドを作りましたが、オブジェクトに立った状態にする方法をここに書いておきたいと思います。
他のサイトを見るとAnimationControllerを使った方法のほうが一般的な気がしますが、一応こんな方法もあるよという感じで見ていただければと思います。
参考にしたサイト:

さて、スケートボードでsitする処理を下図に示します。

Hierarchyのrun_skateboardがスケートボード全体になっています。
DeckからWheel4はスケートボードのアセットそのものから変更していません。
seat以下は私が追加したオブジェクトですが、sitする処理についてはseatオブジェクトのみが関係しています。

seatオブジェクトには通常の椅子と同じようにVRC_Event HandlerとVRC_Triggerを設定します。
また、空中にトリガーを表示させるため、Yに適当な値(0.8)を設定したBox Colliderを追加しています。
seatオブジェクトのTransformの値でsitした時の足の位置が決まります。スケートボード本体の位置に合わせてYの値を調整(0付近?)します。

スケートボードは動いたり回転したりするので、VRC_StationのPlayer MobilityはImmobilize For Vehicleを設定します。また、トリガーを引いてsitしたときに立った姿勢を取るために、Animator ControllerにAvatarControllerTemplateを指定します。
AvatarControllerTemplateはVRCSDKの中の、VRCSDK/Example/Smaple Assets/Animationの中に入っています。
Animator ControllerにAvatarControllerTemplateや別のAnimationControllerを入れるとsitした時の姿勢が変更できます。

冒頭に書いた参考サイトにあるような、デスクトップモードやVRモードで他の人から見た場合の動作は未検証です。これでうまく表示できるとすると、寝られるベッドも親オブジェクトのTransform調整くらいで比較的簡単に実装できそうです。

ここでは、sitした時の姿勢が立った状態になるVRC_Stationの使い方を書きました。
それではVRChat楽しいライフを!

この記事が気に入ったらサポートをしてみませんか?