【Unity】DynamicBoneが分離する時の対処法

3DCG

はじめに

今回はDynamicBoneが意図したとおりに動かない時の対処法を解説します。
ボーンが分離する方や1つ上の階層の動きを引き継ぐとお悩みの方はぜひご覧ください。

原因

これは枝分かれしたボーンがある事が原因です。

DynamicBoneは仕様上の不具合で枝分かれしたボーンがあるとバグが起こります。

どうして。

対処法

対処法は以下の2つです。
・枝分かれしたボーンを削除
・枝分かれ解除+PositionConstraintで親子付け

この2つについて解説します。

枝枝分かれしたボーンを削除

この方法は簡単です。
しかし、ボーンを失うので動きのディティールが失われます。

Blenderを立ち上げ。
枝分かれしたボーンを選択。

Xキー → ボーンで削除。

辻褄が合うようにウエイトを調整。

ファイル → エクスポート → FBXで再書き出し。

こちらのような設定で書き出しました。

UnityでProjectより編集前の.fbxを選択。
Deleteキーで削除。

編集した.fbxをドラッグ&ドロップで上書き。

Hierarchyに上書きした.fbxをドラッグ&ドロップ。
枝分かれの構造が修正されたかを確認。
Dynamic Boneを入れるボーンを選択。

Dynamic Boneをこのように設定。

すると分離する不具合が治ります。

これで枝分かれしたボーンを削除が完了です。

枝分かれ解除+PositionConstraintで親子付け

Blenderに戻ります。
Tabキーで編集モード。
枝分かれしたボーンを選択。

Dynamic Boneを入れる予定のボーンを確認。
Shift+クリックで“1つ前にある階層”のボーンを選択。

Ctrl+P → オフセットを保持を選択。

すると親子関係が変わります。
DynamicBoneを入れる予定の場所に枝分かれ構造が無くなったことを確認。

.fbxで書き出し。

UnityでProjectより編集前の.fbxを選択。
Deleteキーで削除。

編集した.fbxをドラッグ&ドロップで上書き。

Hierarchyにfbxをドラッグ&ドロップ。
古いデータは_oldなどにリネーム。

古い方のDynamic Boneを入れたボーンを選択。

Inspectorを見ます。
Dynamic Bone右上の点3つを選択。

Copy Componentを選択。

新しく用意したモデルの階層を開きます。
Dynamic Boneを入れたいボーンを選択。

Inspectorを確認。
Transform右上の点3つを選択。

Paste Component As Newを選択。

Dynamic BoneのRootを確認。
“新しいモデルのボーン”に変更。

枝分かれを解除した方のボーンを選択。

Inspector → 3つの点 → Paste Component As Newを選択。

Rootを確認。
新しいモデルの“枝分かれを解除したボーン”を選択。

Add Componentを選択。

検索欄にPosと入力。
Position Constraintを選択。

Is Activeにチェック。
Sources右下の+をクリック。

Sourcesで枝分かれを修正する前の“本来、親だったボーン”を選択。
※新しいモデルの方から選んでください。

Playボタンを押します。

この状態で動かすと疑似的に枝分かれ構造を再現できます。

これでDynamic Bornの修正が完了です。

VRChat上でも動きます。

※補足

コンポーネントについての補足です。

親子関係付けならParentConstraintを使うと何故か動きませんでした。
ParentConstraintとDynamicBoneはTransformeのパラメーターを書き換えるコンポーネントです。
なので競合するようです。

なのでPositionConstraintを使ってます。
これは位置だけを書き換えるコンポーネントのようです。
なのでDynamicBoneの回転が反映されるみたいです。(たぶん)

まとめ

今回はDynamicBoneが分離する時の対処法を紹介しました。

【原因】
DynamicBoneは枝分かれした構造のボーンに使うとエラーが起こる。

【対処法】
・枝分かれしたボーンを削除
・枝分かれ解除+PositionConstraintで親子付け


コメント

タイトルとURLをコピーしました