はじめに
今回はDynamicBoneが意図したとおりに動かない時の対処法を解説します。
ボーンが分離する方や1つ上の階層の動きを引き継ぐとお悩みの方はぜひご覧ください。
![](https://signyamo.blog/wp-content/uploads/2022/02/Animation1-2.gif)
原因
これは枝分かれしたボーンがある事が原因です。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-03-11.jpg)
DynamicBoneは仕様上の不具合で枝分かれしたボーンがあるとバグが起こります。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-04-10.jpg)
![](https://signyamo.blog/wp-content/uploads/2022/02/image-01-12.jpg)
どうして。
対処法
対処法は以下の2つです。
・枝分かれしたボーンを削除
・枝分かれ解除+PositionConstraintで親子付け
この2つについて解説します。
枝枝分かれしたボーンを削除
この方法は簡単です。
しかし、ボーンを失うので動きのディティールが失われます。
Blenderを立ち上げ。
枝分かれしたボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-05-7.jpg)
Xキー → ボーンで削除。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-06-8.jpg)
辻褄が合うようにウエイトを調整。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-07-6.jpg)
ファイル → エクスポート → FBXで再書き出し。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-15-3.jpg)
こちらのような設定で書き出しました。
![](https://signyamo.blog/wp-content/uploads/2022/02/add-02.jpg)
UnityでProjectより編集前の.fbxを選択。
Deleteキーで削除。
![](https://signyamo.blog/wp-content/uploads/2022/02/add-03.jpg)
編集した.fbxをドラッグ&ドロップで上書き。
![](https://signyamo.blog/wp-content/uploads/2022/02/add-04.jpg)
Hierarchyに上書きした.fbxをドラッグ&ドロップ。
枝分かれの構造が修正されたかを確認。
Dynamic Boneを入れるボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-08-5.jpg)
Dynamic Boneをこのように設定。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-09-4.jpg)
すると分離する不具合が治ります。
![](https://signyamo.blog/wp-content/uploads/2022/02/Animation2-1.gif)
これで枝分かれしたボーンを削除が完了です。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-10-7.jpg)
枝分かれ解除+PositionConstraintで親子付け
Blenderに戻ります。
Tabキーで編集モード。
枝分かれしたボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-11-5.jpg)
Dynamic Boneを入れる予定のボーンを確認。
Shift+クリックで“1つ前にある階層”のボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-12-4.jpg)
Ctrl+P → オフセットを保持を選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-13-4.jpg)
すると親子関係が変わります。
DynamicBoneを入れる予定の場所に枝分かれ構造が無くなったことを確認。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-14-3.jpg)
.fbxで書き出し。
![](https://signyamo.blog/wp-content/uploads/2022/02/add-01-1.jpg)
UnityでProjectより編集前の.fbxを選択。
Deleteキーで削除。
![](https://signyamo.blog/wp-content/uploads/2022/02/add-03.jpg)
編集した.fbxをドラッグ&ドロップで上書き。
![](https://signyamo.blog/wp-content/uploads/2022/02/add-04.jpg)
Hierarchyにfbxをドラッグ&ドロップ。
古いデータは_oldなどにリネーム。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-15-4.jpg)
古い方のDynamic Boneを入れたボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-16-3.jpg)
Inspectorを見ます。
Dynamic Bone右上の点3つを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-17-3.jpg)
Copy Componentを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-18-3.jpg)
新しく用意したモデルの階層を開きます。
Dynamic Boneを入れたいボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-19-3.jpg)
Inspectorを確認。
Transform右上の点3つを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-20-1.jpg)
Paste Component As Newを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-21-1.jpg)
Dynamic BoneのRootを確認。
“新しいモデルのボーン”に変更。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-25-2.jpg)
枝分かれを解除した方のボーンを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-23-2.jpg)
Inspector → 3つの点 → Paste Component As Newを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-24-2.jpg)
Rootを確認。
新しいモデルの“枝分かれを解除したボーン”を選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-25-1.jpg)
Add Componentを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-26-1.jpg)
検索欄にPosと入力。
Position Constraintを選択。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-27-2.jpg)
Is Activeにチェック。
Sources右下の+をクリック。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-28-1.jpg)
Sourcesで枝分かれを修正する前の“本来、親だったボーン”を選択。
※新しいモデルの方から選んでください。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-29.jpg)
Playボタンを押します。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-30.jpg)
この状態で動かすと疑似的に枝分かれ構造を再現できます。
これでDynamic Bornの修正が完了です。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-31-2.jpg)
VRChat上でも動きます。
![](https://signyamo.blog/wp-content/uploads/2022/02/VRChat_1920x1080_2022-02-12_14-39-23.621.jpg)
※補足
コンポーネントについての補足です。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-34.jpg)
親子関係付けならParentConstraintを使うと何故か動きませんでした。
ParentConstraintとDynamicBoneはTransformeのパラメーターを書き換えるコンポーネントです。
なので競合するようです。
![](https://signyamo.blog/wp-content/uploads/2022/02/image-32.jpg)
なのでPositionConstraintを使ってます。
これは位置だけを書き換えるコンポーネントのようです。
なのでDynamicBoneの回転が反映されるみたいです。(たぶん)
![](https://signyamo.blog/wp-content/uploads/2022/02/image-33.jpg)
まとめ
今回はDynamicBoneが分離する時の対処法を紹介しました。
【原因】
DynamicBoneは枝分かれした構造のボーンに使うとエラーが起こる。
【対処法】
・枝分かれしたボーンを削除
・枝分かれ解除+PositionConstraintで親子付け
コメント