Unity
VRChat

[VRChat]ふわっとしたスカートで座っても安心のDynamicBone吊りスカート


概要

先日のバーチャルマーケット2で初めてアバターを購入しました。

ジョー太郎さんのクラムちゃんです。めちゃんこかわいい。

VRChat_1920x1080_2019-03-10_15-39-31.142.png

だけど、ふわっとしたスカートなのでVRChatだと椅子に座ったとき(Sitしたとき)に荒ぶってしまう!

これはこのアバターが悪いのではなくて、

おそらく、ふわっとスカート持ちの方に共通する悩みではないかと思います。

どうにかできないかを考えてみました。

タイトルにもある通り、この手法ではDynamicBoneを使用します。

スカートにもDynamicBoneが使用されていることを前提として話をします。


デフォルトのSitモーションを変更する

まず前段の話ですが、座り姿勢のモーションを変更します。

こちらの記事が参考になると思います。

私は妻からやり方を聞いたのですが、Unity初心者用にまとめてくれていました。



コライダーを足の周囲のInside型にして突き抜け防止

前段その2、DynamicBoneのコライダーを足のOutside型ではなく、足の周囲のInside型にします。

初めて聞くとなんのこっちゃ? という話ですが、これをしないと足がスカートを突き抜ける可能性が高くなります。

詳しくはこちらの記事で解説されています。


ここまでやれば、うまくいくかな?

これでおそらく座り方は万全!

ということで、VRChatで試してみると……





こんな感じで、体の向きによってスカートがふわふわ暴れて中身がコンニチワしそうになります。

この原因、最初は上記のInsideコライダーの設定がうまくいっていないのかな……

実はSitしたとき足の付け根も回転してコライダーが暴れているのでは……

などと思ったのですが、

問題はコライダーではなく、スカートがHipsボーンにくっついているために、Hipsの回転と一緒にスカートまで回転してしまうことでした。

VRChatでSitしたとき、足の付け根から先までは設定したモーションで固定されますが、Hipsから上は体の動きに合わせて回転したりします。

Hipsに直接ついているスカートはその動きをダイレクトに受けることになります。


解決のカギはスカートを水平に保つこと

解決方法として、重力を入れてスカートを落としてしまうことも考えられますが、

重力を入れてしまうと、通常のふわっと感が損なわれてしまう恐れがあるので避けたいところ。

そもそも、実際には座ったときにいくら腰やお尻をくねらせてもスカートはくねらないでほぼ水平を維持して欲しいものです。

つまり、スカートのボーンをまとめて、地面から常に水平になるようなGameObjectにくっつけられれば、解決できそうです。


水平を保つGameObjectをDynamicBoneで作り、スカートをぶら下げる

地面から水平を保つGameObjectなんてスクリプトを組めれば一瞬なんですが、VRChatのアバターにはスクリプトを組み込めないので、DynamicBoneを使用します。

イメージとしては、スカートを紐で吊るす感じ。

紐を手に持って手首を回転させても、紐は重力でまっすぐ下がり、スカートは傾いたりしないような、そんなイメージです。


親子関係を構成

まず、以下のようにGameObjectの親子関係を構成させます。

変更する前の状態はバックアップしておいてください。

img1.png

1. 吊り元の空GameObjectをHipsの下に作成する。ここではSkirtRootとする。PositionはHipsと同位置(0,0,0)で良い。

2. 吊り先の空GameObjectをSkirtRootの下に作成する。ここではSkirtBranchとする。Positionはほんの微量だけSkirtRootより下にする。(同位置だとうまくいかない)

3. スカートのボーンをドラッグ&ドロップでSkirtBranchの下に移動する。

たまに親子関係を変更するとボーン構成が外れることがあるみたいなので、ここで動作がおかしくなっていないかを実行して確認してみましょう。


DynamicBoneを設定する

DynamicBoneをSkirtRootにアタッチします。設定は以下のとおり。

image.png

Root:SkirtRootをセットする。

Damping、Elasticity、Stiffness:すべて0にする。

Gravity:yのマイナス方向に重力を働かせる。

Exclusions:作用させるべきはSkirtBranchのみのため、その先のスカートのボーンをすべて除外設定する。


できあがり!

これで、立って走ったときも問題なく、座ったときも荒ぶらないスカートが完成しました。


太ももがスカートを突き抜ける問題がやや残っていますが、これはまた別の調整の問題でしょう。

安心して椅子に座ることができますね。