はじめに
今回はPhysBoneの挙動が不安定・fbxで正しく動かないの対処法を紹介します。
症状
まずBlenderでデータを作りPyhs Boneを設定しました。
そして大体OKかなと思い.fbxで書き出して同じ設定にしたところ…
なぜか「.blend」と「.fbx」で動き方が違うという不具合に遭遇しました。

設定は空のオプジェクトに入れてます。
Root Transform以外変えてないので同じはずです。

↓ それなのにBlenderと.fbxで挙動が違う状態になりました。


おや… このPhys Bone… なんか変。
原因
原因は「末端ボーンの処理」の違いです。
Blenderデータを読み込んだ場合はUnity上では末端にボーンが自動生成されてます。

ヒエラルキーを開いて確認。
「_end」という意図しないボーンが入ってると思います。

このボーンまで読み込まれて「Phys Bone」が設定されます。
なので最後のボーンまで正しく設定が入ってました。

一方.fbxは初期設定だと「_end」ボーンが生成されません。
ヒエラルキーを開いても無いです。

つまりこの末端のボーンが消えます。

その結果、Phys Boneの末端部分にボーンが生成されません。

そして詳しいことは分からないですが…
この違いがPhys Bone全体の動きに大きな違いをもたらします。

↓先ほどの.gif。
よく見ると下側の.fbxは末端にボーンが無いですね。

以上が原因です。
対処法
対処法は.fbx側に適切な長さの「Endpoint Position」を設定するです。
長さはシーンを見ながら調整してください。

これで末端にボーンが無くても疑似的に末端部分を作れます。

今回の設定は「Endpoint Positions」が存在しましたが…
小さすぎて適切な挙動をしてませんでした。

あとBlenderの方で設定された方は0にしましょう。
「末端の上」に「疑似的な末端」が増えてバグの原因になります。

ボーンの状況によっては正しく設定されません。
これに関しては諦めましょう。

このような大きさが違い2分岐以上したボーンは大きい方に合わせるのが無難。

これで完全に一致ではないですが…
だいぶ挙動がマシになります。

静止画1枚で見ると違いが分かりますが…
製品として出せるレベルには修正できたと思います。

完全に動きを一致させる方法
.fbxでも「_endボーン」を作れば動きが完全に一致します。
ただし_endボーン分のデータ容量が増えます。

こちらは.fbx書き出しの設定をやり直す必要があります。
ファイル → エクスポート → FBXを選択。

「リーフボーンの追加」を有効化してエクスポート。
このリーフボーンが「_end」ボーンを表す専門用語になります。

この方法は長さが違う2つ以上の分岐があるモノで特に有効になると思います。

ただし、使えるなら「Endpoint」使った方がデータ容量的には良いはず… です。

以上がPhysBoneの挙動が不安定・fbxで正しく動かないの対処法です。
まとめ
今回はPhysBoneの挙動が不安定・fbxで正しく動かないの対処法を紹介しました。
・原因はfbxにend、リーフボーンが設定されてないこと
・Phys BoneのEndpoint Positionsを設定すれば疑似的にリーフボーンを作れる
・完全に一致させるなら.fbx書き出し時にリーフボーンを作る
また他にもUnityやVRChatについて解説してます。
ぜひ、こちらもご覧ください。






コメント