Unityでゲームを作っていると、キャラクターの髪や尻尾などを揺らしたくなることがあります。そんなときに便利なのがアセットストアで大人気の「Dynamic Bone」というアセットです。
このアセットを使えば簡単に揺れものを実現できるのですが、説明書が簡潔すぎたり設定項目がイマイチわかりづらかったりして「使い方がよくわかんない」とお困りの方も多いかと思います。そこでここではこのDynamic Boneについて
- Dynamic Boneのセットアップ方法
- Dynamic Boneコンポーネントの設定項目の解説
- 揺れものが体などを貫通しないようにする方法
を詳しく説明していきますね。
Dynamic Boneを使った揺れもののサンプル
まずはじめに、Dynamic Boneはどういうアセットなのかが分かりやすいようにサンプル動画をご用意したのでご覧いただければと思います。1枚目が何も設定していないキャラクター、2枚目が耳にDynamicBoneを設定したキャラクターです(※画像クリックでGIF再生)。
見てのとおり2枚目はキャラクターが動くと耳も動いていることが分かりますね。Dynamic Boneを使うと、このようにキャラクターのボーンをいとも簡単に揺らすことができます。
Dynamic Boneのセットアップ方法
ではサンプルをご覧いただいたところで、Dynamic Boneのセットアップ方法を説明します。Dynamic Boneを使うために最低限必要な手順は次の2ステップです。
- 適当なゲームオブジェクトに「Dynamic Bone」コンポーネントをアタッチする
- 手順1のコンポーネントの「ルート」欄にボーンを登録する
手順1:Dynamic Boneコンポーネントをアタッチする
まずは適当なゲームオブジェクトにDynamic Boneコンポーネントをアタッチします。任意のゲームオブジェクトをインスペクターで開き、「コンポーネントを追加」ボタンをクリックして「Dynamic Bone」と検索し出てきたコンポーネントをアタッチしましょう。
ちなみにアタッチする対象のゲームオブジェクトは特に決まりはなくどれでもOKなので、ご自身で分かりやすいゲームオブジェクトを指定するようにしてください。個人的には「キャラクターのゲームオブジェクトの子」として新しい空のゲームオブジェクトを作り、そこにアタッチするのが無難かなと思います。その辺はお好みでどうぞ。
手順2:「ルート」欄にボーンを登録する
次に手順1でアタッチしたコンポーネントの「ルート」欄に、揺らしたい部分の一番根元のボーンを登録します。
ただしボーン構造やボーンの名前はキャラクターモデルによって様々なので、ここでは「このボーンを登録すれば良い」と断言することはできません。お持ちのキャラクターモデルをヒエラルキーで展開して、どこが揺らしたい部分のボーンなのかを調べてみてください。
Dynamic Boneコンポーネントの設定項目について
これでセットアップが完了したので、再生ボタンを押せばとりあえず揺れるようになっていると思います。しかし場合によっては納得いかない揺れ方になっているかもしれません。
そこで次はDynamic Boneコンポーネントの各項目について解説していきますので、ぜひ参考にしていただき満足いく設定を探してみて頂きたいと思います。ただしさすがに全部解説していくと長くなってしまいますので、ここでは重要な部分だけかいつまんで説明していきますね。
- ルート:
Dynamic Boneの影響を受けるボーンのルートトランスフォーム。ここに登録したボーン以下のボーンが揺れるようになります。 - Update Rate:
どのくらいの頻度で揺れものの計算を行うか。値が高いと滑らかな動きになりますが、その分処理が重くなります。 - 減衰:
ボーンが初期位置に戻ろうとする際の抵抗。大きい値を指定するとよりゆっくりと初期位置に戻るようになります。 - 弾性:
ボーンの弾性。大きい値を指定するとボーンがバネっぽく弾むような動きをするようになります。胸の揺れなどを再現する際に重要です。 - 屈曲剛性:
ボーンの曲がりにくさ。大きな値を指定するとよりメリハリのある動きになります。髪の毛などの揺れを再現する際に重要。 - Inert:
ボーンが元に戻ろうとする度合い。尻尾などの揺れを再現する際に重要です。 - 半径:
ボーンの当たり判定の大きさの半径。0より大きい値を指定すると、後述するDynamic Bone Colliderを設定したときにボーンがそのDynamic Bone Colliderに当たって止まるようになります。 - ○○ Distrib:
○○(※たとえばDampingなら減衰)の影響度の分布。デフォルトだと各ボーンへの影響度が均一になっていますが、グラフを設定することでボーンごとの影響力の度合いを調整することが可能です。
例えばDamping Distribが右上がりのグラフになっている場合、根元のボーンの減衰が小さく・末端のボーンの減衰が大きくなる…といった具合です。
揺れものが体などを貫通しないようにする方法
さて上記を参考にしていただければ大体納得いく設定になると思いますが、例えば「スカートが体を貫通してしまう」といった問題が発生する場合があります。そこで最後の仕上げとして「Dynamic Bone Collider」を設定して揺れものが貫通しないようにしてみましょう。主な手順は次の通りです。
- 貫通してほしくない場所にDynamic Bone Colliderコンポーネントをアタッチする
- 貫通してほしくない揺れものの「半径」を0より大きくする
- 手順1のコライダーをDynamic Boneコンポーネントに登録する
手順1:Dynamic Bone Colliderコンポーネントをアタッチする
まずはDynamic Bone Colliderというコンポーネントを、貫通してほしくない場所のゲームオブジェクトにアタッチします(例えば、髪が胸を貫通しないようにしたいなら胸にアタッチする)。
そうするとシーンビューに黄色い球が出ると思うので、それを見ながら「半径」等を適当に調整しておいてください。
手順2:貫通してほしくない揺れものの「半径」を0より大きくする
次に、貫通してほしくない揺れものの「Dynamic Bone」コンポーネントを表示させて、「半径」を0よりも大きくしましょう(例えば髪が胸を貫通しないようにしたいのであれば、髪のDynamic Boneコンポーネントの「半径」を変更してください)。
そうするとシーンビューでは白い球で当たり判定が表示されます。
手順3:手順1のコライダーをDynamic Boneコンポーネントに登録する
最後に手順1でアタッチしたコライダーを、手順2のDynamic Boneコンポーネントの「Colliders」欄に登録してください(※登録しないと当たり判定が発生しないので注意)。
これで揺れものが貫通しなくなりました。ゲームを再生してチェックしてみましょう。
おわりに
以上、Dynamic Boneの使い方について一通り説明してきました。揺れものを自力で実装するとなるとなかなか難しいと思いますが、このアセットを使えば比較的簡単に実現できるのでとても重宝すると思います。持ってるけど使ったことないよ!という方はぜひこの機会に試してみてくださいね。
この記事がUnityでのゲーム開発のお役に立てば幸いです。