やりたいこと
表題の通りです。参考動画、前半のやり方です。
Physbonesで銃のスライド動かす奴、簡易モデルでの試作だからちゃんとしたモデルで動くかはわからないけどうまくいった!
— justice (@yukariAide) April 24, 2022
2つの方法は一長一短だけど、どっちも実用に耐えうるんじゃないかな pic.twitter.com/o4HDkU3Smx
①用意するもの
・銃の3Dモデル(スライド部分にボーンが入っているもの)今回はこちらのモデルをお借りしました。
・親子関係のオブジェクト
画像では分かりやすいように立方体と球で表示していますが、自分がわかればなんでもいいです。
同じように立方体と球を目印とつかう場合はコライダーを抜くのを忘れずに。
②位置合わせ
親子オブジェクトを銃オブジェクトに入れます。
この時の親子オブジェクトの向きは非常に重要です。しっかりとスライドに沿った向きで、また、親オブジェクトが前、子オブジェクトが後ろに来るように配置してください。
この親子オブジェクトを配置した場所が、握って引く判定部分になるのでスライドに重なるか、ちょっと上ぐらいがおすすめ。
③PhysBoneの設定
親子オブジェクトの親にPhysBoneを追加してください。
設定は画像の通りに。
Forces……Pullを1に設定することで初期位置に戻る力を強く、Springを0にして余計な動きをしないように、Immobileは1にして動かしても余計な力が働かないように。
Limits……ボーンの可動域の設定。Angleに設定して0度にすることで動かないように。
Collision……手で掴む判定の大きさ。お好みで。
Max Stretch……ボーンの伸びる距離=銃のスライドの稼働距離
④Constraintの設定
銃のスライダーのボーンにPosition Constraintを追加。
設定は画像の通りに。
もし、この設定をした後に、親子オブジェクトを動かしたりしたくなった場合は、必ずIs Activeのチェックを外してから移動させること。移動させた後にActivateを押しなおすのを忘れずに。
以上です。あとはこの設定をした銃をアバターの手に持たせて、もう片方の手でスライダーを握ればスライドアクションができるはずです。
Q&A的な
Q,スライドの可動域を調整したい
A,PhysBoneのMax Stretchの値を弄ってください。
Q,スライドの方向以外に引っ張ってもスライドされる
A,多分仕様です、あきらめてください。
Q,銃を持った方の手を握りこむと、スライドが引けなくなる
A,どうもPhysBone一つにつき握れる手はひとつらしいです。銃を持った方の手は握りこまないようにするか、判定を小さくしたり少し移動させたりしてみてください。
Q,VRCでうまく動かないけどどこが駄目なんだろう
A,ExMenuのアバターセッティングからPhysBoneを可視化できるデバックモードがあります。そっちで見るとボーンを掴めてるか、引っ張った時にどんな挙動をしてるかが確認できます。
おわり
一方向に移動する系のギミックは軒並み同じ方法で実装できると思います。電気の紐とか、棚の引き出しとか。
そのうちもっといい方法が出てくるといいね。