最終更新: kurotori4423 2018年09月06日(木) 21:37:00履歴
Dynamic Boneで設定した揺れものは Dynamic Collider を使用することによって干渉することができるが、干渉するコライダーをリストに登録する必要があり、他のプレイヤーが触ろうとしても干渉することができなかった。
そこで、Dynamic BoneではなくUnityの標準コンポーネントであるConfigurable JointなどのJoint系のコンポーネントを使用することによって、限定的ではあるが他のプレイヤーが干渉可能な揺れモノを作ることができる。
そこで、Dynamic BoneではなくUnityの標準コンポーネントであるConfigurable JointなどのJoint系のコンポーネントを使用することによって、限定的ではあるが他のプレイヤーが干渉可能な揺れモノを作ることができる。
この揺れモノに対して干渉できるのはColliderがアタッチされたオブジェクトだけなので、他の人に触ってもらうには、その人のアバターにコライダーを仕込んでもらう必要がある。またDynamic Colliderを設定していてもUnity標準のColliderとは仕組みが異なるため、干渉することができない。
例えば、この機構を搭載したアバターのプレイヤーAに対し、プレイヤーBが揺れモノを揺らした場合、揺れの結果はプレイヤーBにしか見えず、アバターの主のAにも見えない。また第三者のプレイヤーからも見えない。
また、Dynamic Bone と Dynamic Colliderの場合と異なり、自分自身の揺れモノを自分で揺らしても他の人からは揺れているようには見えない。
また、Dynamic Bone と Dynamic Colliderの場合と異なり、自分自身の揺れモノを自分で揺らしても他の人からは揺れているようには見えない。
あらゆるコライダー付きのオブジェクトに反応する為(Pickupオブジェクトは除く)壁などのコライダーにめり込んだ時にめちゃくちゃにボーンが暴れる問題がある。またワールドの負荷にも影響を受け不自然に振動したりすることがある。
まず、揺らしたいボーンである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にも設定をコピーし、設定は完了。
次に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にも設定をコピーし、設定は完了。
コメントをかく