めーぷるのおもちゃばこ

- アイドルになりたいエンジニア女子の制作日記 -

【Unity】Dynamic Boneで揺れものの実装

はじめに

アバターの髪の毛とか、アクセサリーとか、ゆらゆらさせるとリアル感が出ていいですよね!
今日はそんな揺れもの実装のことについて書きます!

ゆらゆら揺れる髪の毛をもつアバターが羨ましくて私も揺らしてみました!



肉を。

f:id:maplesyrup-cs6:20190628175559g:plain
肉を。

ーーー

実装しよう〜Blenderで準備編〜

まず、揺れものを揺らすにはオブジェクトにボーンが入ってないといけないです。
お肉には以下のような感じでBlenderに骨を入れました。

f:id:maplesyrup-cs6:20190628180100p:plain
お肉の骨


ボーンの入れ方がわからない人は以下の記事をご覧ください。Blenderでのやり方の説明になります。
私がSTYLY MAGAZINEで書かせていただいてる記事です🐼
styly.cc


ボーンを入れたら、アニメーションとかはつけなくて大丈夫です。それぞれのボーンの動きだけ確認しておきます。

f:id:maplesyrup-cs6:20190701143837g:plain
ボーンの動きの確認


うむ。しっかり揺れてくれそうですね。
アーマチュアとメッシュをFBXで書き出します。上のメニューから ファイル>エクスポート>FBX を選択します。
書き出す時の設定は以下の感じです。メインタブではメッシュとアーマチュアを選択し(Shift押しながら選択)、アーマチュアタブにはデフォームボーンのみにチェックを入れます。(このでデフォームボーンのとこはよくわかってないので変になったらこれ外してみてください。)

f:id:maplesyrup-cs6:20190701145240p:plain
書き出し設定


これで書き出したらおっけーです。

実装しよう〜Unityでの設定編〜

アセットの購入

Unityを開いたら先ほど書き出したモデルを入れましょう。テクスチャがある場合はテクスチャも一緒に。
モデルを入れたら、ヒエラルキーにドラッグアンドドロップで置きます。

f:id:maplesyrup-cs6:20190701150013p:plain
ヒエラルキーに配置します。


続いて、Asset Storeを開き、Dynamicと検索して、Dynamic Boneというアセットを見つけます。これを購入します🐼

f:id:maplesyrup-cs6:20190701150134p:plain
Dynamic Bone

購入したら、インポートします。

Dynamic Boneの設定

アセットがインポートできたら、ヒエラルキーのCreate→Create Emptyで空のゲームオブジェクトを作ります、
名前をDynamic Boneとかにしておきます。

f:id:maplesyrup-cs6:20190701152304p:plain
空のゲームオブジェクトの作成


そして、揺らしたい部位(例えばアバターならスカートとか髪の毛とか)を作った空のゲームオブジェクトの子オブジェクトにします。
私の場合は肉だったので肉ごと子オブジェクトにしました。

f:id:maplesyrup-cs6:20190701153011p:plain
空のゲームオブジェクトの子にする


次に、先ほど親になった空のゲームオブジェクトを選択し、インスペクタのAdd ComponentからDynamic Boneを選択して追加します。

f:id:maplesyrup-cs6:20190701153555p:plain
Dynamic Boneスクリプトの追加


追加したDynamicBoneのRootに、揺らしたいパーツの根元のオブジェクトをドラッグアンドドロップで入れます。
ここでは肉、髪の毛とかを揺らしたい場合ならHeadとかかな?を設定します。

f:id:maplesyrup-cs6:20190701155217p:plain
揺らしたいパーツの根元のオブジェクトごとドラッグアンドドロップ


これで実行して、ヒエラルキーから親にした空のゲームオブジェクトを動かしてみましょう。無事揺れていたら成功です。あとは細かい調整になってきます。

f:id:maplesyrup-cs6:20190701160103g:plain
揺れました!
ーーー

調整パラメーターについて

調整のパラメーターは以下のような感じです。

f:id:maplesyrup-cs6:20190701165941p:plain
調整パラメーターについて
ーーー

1つづつ説明していきます🐼

①Update Rate

ー描画速度ー

ここは描画速度です。毎秒何回処理するか。
60とかにすれば早く揺れるし小さくすればゆっくり揺れます。

f:id:maplesyrup-cs6:20190702004429g:plain
Update Rate

②Update Mode

ー描画タイプー

いまいちよくわかってないんですが、3種類あります。
NormalAnimate PhysicsUnscaled Timeです。
NormalとUnscaled Timeの違いはいまいちわかりませんが、Animate Physicsは少し滑らかに落ち着いた感じになりました↓

f:id:maplesyrup-cs6:20190702154903g:plain
Update Mode

③Damping

ー減衰力ー

値を小さくすると細かく揺れます。
値を大きくするとゆっくり大きく揺れます。

f:id:maplesyrup-cs6:20190702125016g:plain
Damping

Distribのところで、キーフレームを打って曲線で細かく設定もできます。
曲線で細かく設定できるので先っぽだけめっちゃ揺れる、みたいな表現とかもできます。


④Elasticity

ー弾性ー

変形した物体がもとの形にもどろうとする性質。
値が小さいと、滑らかに元の形状に戻ります。
値が大きいと、すぐに元の形状に戻ります。
値を0にしたら元の形状に戻ってくれませんでした↓

f:id:maplesyrup-cs6:20190702125515g:plain
Elasticity

Distribのところで、キーフレームを打って曲線で細かく設定もできます。


⑤Stiffness

ー剛性ー

力に対する変化の度合いの値。
値が小さいと、柔らかい感じの揺れ方になります。
値が大きいと、硬い感じの揺れ方になります。

f:id:maplesyrup-cs6:20190702153404g:plain
Stiffness

Distribのところで、キーフレームを打って曲線で細かく設定もできます。


⑥Inert

ー不活性ー

ちょっと動かしただけで揺れるのか、大きく動かさないと揺れないのか、みたいな設定です。
値が小さいと、ちょっと揺らしただけで揺れます。
値が大きいと、大きく動かさないと揺れないです。

f:id:maplesyrup-cs6:20190702153447g:plain
Inert

Distribのところで、キーフレームを打って曲線で細かく設定もできます。


⑦Exclusions

ー揺れないボーンの指定ー

設定したボーンにはDynemic Boneが適用されなくなります。
実際やってみると、設定したボーンより後のボーンは動かない感じでした!

f:id:maplesyrup-cs6:20190702150338g:plain
Exclusions


⑧Freeze Axis

ー揺れ方の方向制御ー

揺れる方向を特定の方向に設定できます。



以上です!🐼
なんか難しいですがこれらを調整することでいろんな揺れものを表現できそうです。