2020/11/09
【開発日記】Unityでマイキャラの服に「DynamicBone」を入れてみたお話
time 2019/12/21
というわけで、ずっと試そうと思って試していなかったアセット「Dynamic Bone」を使ってみたお話です!
Unityで揺れものを扱ったのはかなり前で、4.1の頃に「Configurable Joint」で弄って以来です。
その時はすごく大変だった記録がありますが、DynamicBoneであれば(比較的)楽に設定できました。さすが有名なアセットだけありますね!
今回はそんなDynamicBoneを使うまでの流れをご紹介します。
目次
環境
・Unity
2019.3.01f
・Blender
2.80
・Dynamic Bone
1.2.1
DynamicBoneの導入
DynamicBoneは有料アセットなので、Unityのアセットストアから購入します。
頻繁にセールの対象になるので、持っていない場合は待ったほうが良いです。
https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743
モデルの準備
boneの作成
DynamicBoneはその名前のとおり「boneを動的に揺らす」ものです。なのでまずは揺らしたいオブジェクトにboneを設定する必要があります。
どの程度boneを入れれば良いかはオブジェクトによります。実際にやってみた感じでは、マントやリボン・スカーフなどは少なめでもいけますが、服やスカートは相応に入れないと不自然な動きになりがちです。
参考までに私のキャラの場合、以下のように設定しました。
・ストールと服は8方向に3本ずつ
・スカーフは形に合わせて前に5本、左右に2本ずつ
追加するboneは既存のArmatureの近いboneから、エディットモードのエルードで伸ばして設定します。オブジェクトが離れている場合はboneプロパティの「connected」のチェックを外して動かします。
服やスカートを作る場合、1方向にboneを入れた後、そのboneをShift+Dで複製すると楽です。複製後はRで回転させるなり、コンテキストメニューの「Mirror」で反転させるなりで揃えます。
ウェイトの設定
boneを入れたらいつも通りCtrl+Pの「With Automatic Weights」で頂点グループとウェイトを設定し、ウェイトペイントモードで調整していきます。
DynamicBone用に増やしたboneは、揺らしたいオブジェクトにのみウェイトを設定します。しかし「With Automatic Weights」で関連付けると他のオブジェクトにも作用してしまいがちです。
そんな時はオブジェクトを選択し、プロパティの頂点グループからDynamicBone用boneを消してしまいましょう。これで確実に作用しなくなります。
boneごとのウェイトを設定し終えたらUnityへインポートします。
DynamicBoneの設定
DynamicBoneを設定するboneの選択
インポートしたモデルをシーン上に配置し、ヒエラルキーから揺らしたいboneの一番親のboneを選択して「Dynamic Bone」コンポーネントを追加します。
上の画像のように親のboneにだけ追加すればOKで、子のboneに追加する必要はありません。
このキャラの場合は、スカーフの付け根に1つと、ストールと服の一番上のboneに8つずつ設定しました。
DynamicBoneコンポーネントの設定
まず「Root」にbone自身のTransformの参照を指定します。ヒエラルキーからドラッグ&ドロップするだけ。
パラメータの意味はアセットのreadmeに書いてあります。が、英語力が残念な私ではよく分からなかったので、他のサイト様の解説を元に設定しました。私のキャラの服の場合は以下のような感じ。
この状態で一度再生してみます。適当に動かしたりアニメーションさせたりしましょう。
上手くいけば揺れてフワッとした感じになります。
もっと大げさに動かす設定にすると躍動感がでますが、他のアニメーションで崩壊しまくるのでこの程度にしています。細かい調整が必要ですね。
DynamicBoneColliderの設定
揺らしたオブジェクトが体を突き抜けてしまう場合、体の各boneにDynamicBoneColliderコンポーネントを設定してめり込まないようにできます。
コライダーは黄色の球体で表示されます。パラメータを弄ってなるべくフィットさせます。
次にDynamicBoneコンポーネントの「Colliders」にDynamicBoneColliderを設定します。これもヒエラルキーからドラッグ&ドロップでOKです。
これで揺らしたオブジェクトがDynamicBoneColliderの判定とぶつかるようになります。上手く調整してなるべく突き抜けないようにします。