VRChatでのケモノコミュニティ KemonoClub のWikiです。VRChatでケモノになるためのHowTo、ケモノアバターの紹介。イベントやコミュニティの情報を紹介しております。

他人が触れる揺れモノ構造

Dynamic Boneで設定した揺れものは Dynamic Collider を使用することによって干渉することができるが、干渉するコライダーをリストに登録する必要があり、他のプレイヤーが触ろうとしても干渉することができなかった。
そこで、Dynamic BoneではなくUnityの標準コンポーネントであるConfigurable JointなどのJoint系のコンポーネントを使用することによって、限定的ではあるが他のプレイヤーが干渉可能な揺れモノを作ることができる。


現状の問題点

触れる側にも設定が必要

この揺れモノに対して干渉できるのはColliderがアタッチされたオブジェクトだけなので、他の人に触ってもらうには、その人のアバターにコライダーを仕込んでもらう必要がある。またDynamic Colliderを設定していてもUnity標準のColliderとは仕組みが異なるため、干渉することができない。

触ったときの揺れは、触った本人にしか反映されない

例えば、この機構を搭載したアバターのプレイヤーAに対し、プレイヤーBが揺れモノを揺らした場合、揺れの結果はプレイヤーBにしか見えず、アバターの主のAにも見えない。また第三者のプレイヤーからも見えない。
また、Dynamic Bone と Dynamic Colliderの場合と異なり、自分自身の揺れモノを自分で揺らしても他の人からは揺れているようには見えない。

Dynamic Boneに比べて非常に荒ぶりやすい

あらゆるコライダー付きのオブジェクトに反応する為(Pickupオブジェクトは除く)壁などのコライダーにめり込んだ時にめちゃくちゃにボーンが暴れる問題がある。またワールドの負荷にも影響を受け不自然に振動したりすることがある。

設定例

ここでは自作のアバターである黒鉄モデルの胸筋をConfigurable Jointを使用して、干渉可能な揺れモノとしてセットアップする例を紹介する。揺らすボーンは黒鉄モデルのChest_L、Chest_R


胸の揺れボーン設定

まず、揺らしたいボーンであるChest_LとChest_Rを揺らすときの親としたいボーンと同じ階層に移動させる。尻尾のようにいくつかのボーンの連なりとなっているものはダイナミックボーンを使わずに尻尾などを揺らしたい時を参考に、全てが同じ階層になるように分解する。



次にChest_Lに対してConfigurable JointコンポーネントとCapsule Colliderコンポーネントを追加する。Configurable Jointコンポーネントを追加すると自動的にRigidbodyコンポーネントも追加される。



親としたいボーン、この場合はChestにRigidbodyをつける。必ず「Use Gravity」はOffに「Is Kinematic」はOnにする



Chest_LのConfigurable Jointコンポーネントの「Connected Body」に先程設定したChestを登録する。



次に、Cupsule Colliderの大きさ(RadiusとHeight)と位置(Center)を調整する。回転させたい方向に重心を偏らせるとそれらしい揺れが得やすくなる。



Configurable Jointの「X Motion」「Y Motion」「Z Motion」を「Locked」に設定、「Angular X Motion」、「Angular Z Motion」を「Limited」に設定、「Angualar Y Motion」を「Locked」に設定する。
これでこのJointは移動せずX軸(縦方向)とZ軸(横方向)にのみ揺れ、Y軸(捩じれ方向)には回転しなくなる。ただし、モデルによってボーンの軸の方向が異なる場合があるので必ず確認すべし。



次にConfigurable Jointの「Low Angular X Limit」と「High Angular X Limit」のLimitを設定する。前者はX軸回転角の下限角度で、後者は上限角度を表す。胸のような弾力があり押されても完全に最初の状態に戻るようにするのであれば両方0に、重力に従って多少垂らしたいのであれば-5〜10度などに設定すると良い。



次にConfigurable Jointの「Angular X Limit Spring」の「Spring」の値を設定するこの値は制限角度以上に回転した場合、バネのように制限角度に戻す力で、胸などをふんわり戻したい場合は10〜30が最適。ただし角度制限によって若干挙動が異なるので、再生状態でColliderとRigidbody付きのCubeなどで触ってみて、最適なパラメータを探すべし。同じように「Angular YZ Limit Spring」の「Spring」も設定する。




ここまでで設定し終えたら「Copy Component」、「Paste Component As New」などを利用してChest_Rにも設定をコピーし、設定は完了。

手に触る用のコライダーをつける

手にSphere Colliderなどのコライダーを設定する。設定するのはColliderだけでよいが、Rigidbodyも付けておくと当たり判定の挙動が若干良くなる気がする(謎)。Rigidbodyを付ける場合は必ずUse GravityをOffにし、Is KineticをOnにする。

ここまで設定できたらVRChatにアバターをアップロードして動作をテストする。

触る側のアバターの設定

同じように手にSphere Colliderなどのコライダーを設定すれば触れるようになる。

Dynamic Boneと混ぜて使う方法(未検証)

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

ワールド制作

メンバーのみ編集できます