[sc name="728x90_pusa-splatoon_top_header"]

[toc]

はじめに

DynamicBone で次の様な事がうまくできなくて困った事はありませんか?

  • 揺れの感じがうまく付けれない
  • 長い髪の毛が腕や体をすり抜ける

前者は DynamicBone のパラメータを適切に設定できたら解決でき、後者は当たり判定 DynamicBoneCollider を設定すれば解決できます。本記事はこれら設定の手助けになればと思い書きました。

DynamicBone で見落とされがちな挙動

「DynamicBone をシェイプにアタッチしたらその配下のボーンにまで DynamicBone が適用される」これは、DynamicBone を使う上で重要な挙動です。覚えておいて下さい。

大抵のやってみた系のサイトは DynamicBone のこの重要な挙動が書かれておらず、挙句、シェイプ 1 つ 1 つに DynamicBone をアタッチするやり方を紹介している所もありますね…。

例えばボーンが数十あるドレスのスカートを揺らしたい場合、ルートシェイプに DynamicBone を 1 つアタッチし、~ Distrib というパラメータで全ての子ノードに設定をよろしく伝搬できるという便利な使い方ができます。

DynamicBoneCollider

DynamicBoneCollider は DynamicBone との当たり判定に使われます。基本的な使い方の流れは下記の通りです。

  1. DynamicBone を shapeX に設定する
  2. shapeX と当たり判定を行いたい  shapeY に DynamicBoneCollider を設定する
  3. shapeX の DynamicBone -> Collider のサイズを 1 にして shapeY をドラッグドロップ

さて、DynamicBoneCollider の当たり判定の区間設定が重要なので説明しておきます。当たり判定区間は初期状態では球状になっていますが Height を弄る事でカプセル状で行えます。球からカプセル状に当たり判定を広げる事ですり抜け防止をしやすくなります。具体的な設定方法はパラメータの項で説明します。

パラメータ

揺れの感じがうまく付けられない原因はそもそもパラメータの意味を理解していない場合が多いです。何か適当にパラメータを弄っていたらうまく行ったはもう卒業しましょう!ここでは DynamicBone/Collider のパラメータについて説明します。

DynamicBone

Damping

バネ定数です。値が高い程より高いバネ定数の物を揺らしている様な感じになります。

Damping Distrib

子ボーンの Damping を調整します。~ Distrib は全て同様の機能です。

Elasticity

すいません、何のパラメータかよくわかっていません。

Stiffness

文字通り固さです。

Inert

イナーシャ、つまり慣性の事です。値を大きくすると挙動が重たい物を揺らした時の様な挙動になります。

Radius

衝突判定に使われる球の半径です。

Exclusions

配下のボーンのうち DynamicBone を適用しないボーンを指定します。

DynamicBoneCollider

Center

x, y, z で衝突判定に使われる球体の位置を調整します。

Radius

球の半径です。

Height

当たり判定の範囲をカプセル状に広げます。その長さを設定します。Direction の方向に Height だけ球を引き延ばします。Height を設定するとビューワ上は一見球が 2 つある様に見えますが実際はカプセル状の区間が当たり判定に使われます。

Direction

上記 Height 方向を決めます。

Bound

衝突判定を外部か内部のどちらかで発生させるかを指定します。

髪のすり抜け対策

髪とその他の当たり判定の付け方の定石を紹介します。とりあえず大体こうすれば上手く行くよというものです。

体の中心部分~頭に当たり判定を付ける

unity chan の場合 hip に頭部付近までの楕円状の当たり判定を付けてやると髪の毛が体をすり抜け難くなります。下図が unity chan の hip に楕円状の当たり判定を置いた時のビューです。腰と頭に球が 2 個見えていますがこの 2 つの球を両端とするカプセル状の空間に当たり判定があります。

私が失敗した点としては uwagi だとかがんだ時に当たり判定のカプセルがかがむ前の位置にいるんですよね。これだと髪の毛が体をすり抜けてしまいました。uwagi が mesh_root 配下にあって SkinnedMeshRenderer がアタッチされているのが原因だと思います。実際にボーンが通っているシェイプに DynamicBoneCollider をアタッチしましょう。

腕に当たり判定を付ける

腕のすり抜け防止用だったり髪の毛を手で触れるようにするために当たり判定を付けます。

参考

参考にしたサイト一覧のメモです。

  • 27:14~ DynamicBone の説明
    https://www.youtube.com/watch?v=HN3p2Nsuc1U
  • ~7:43 Inner, Dumping などの説明(無音)
    https://www.youtube.com/watch?v=YrLhRj_OPVw
  • ~9:59 collider の説明
    https://www.youtube.com/watch?v=GXrllGsGlFI
[sc name="728x90_pusa-splatoon_top_header"]