Blender v2.82
Unity 2021.3.6f1
症状
元々FBXをHierarchyに配置して作ったGameObjectがあった。
元のFBXを更新するとUnity側のアニメーションとかShapeKeyの挙動がおかしくなる事があった。
ボーンの座標はGameObject化したときに固定されてしまうのでアニメーションがバグるのは分かるが、ShapeKeyはなぜかバグる。Skinned Mesh Rendererコンポーネントが悪さしてる?
解決策
GameObjectを更新すると治る。
が、元々あったGameObjectを壊したりせずなるべく手間を掛けずに更新したい。
更新方法
1.まず元々のモデルのGameObjectの構造を以下のようにする。
MeowbieObject :FBXとか制御用のGameObjectを配置するための親GameObjectのPrefab
├ Meowbie :FBXをD&DしたときにできたGameObjectをPrefab化したもの
│ └ BeginnerMarkとか :FBX内のメッシュやボーン等のオブジェクト
└ LookPointとか :ゲームの制御用に座標を指すためのGameObject
更新の手間が増えるため、FBXのPrefab Object(Meowbie)にはなるべく不要なコンポーネントはアタッチしないでおく。
2.更新したFBXファイルをHierarchyにD&D
3.手順2で作ったGameObjectのコンポーネントを元のPrefabを参考に修正する
私の場合はSkinned Mesh Rendererコンポーネントのマテリアルを差し替えたり、AnimatorコンポーネントにAnimator Controllerをアタッチしたりする。
4.手順2で作ったGameObjectをPrefabに上書き
例でいうとHierarchyからProjectのMeowbieという名前のPrefabファイルにD&Dする
Replace Anyway→Original Prefabを選択
(※間違って他のPrefabを上書きすると取り返しの付かない事になるかもしれないので事前にGit管理とかしよう。)
これで元々あったGameObjectが更新される。
5.手順2で作ったGameObjectを削除
6.アニメーションやShapeKeyの挙動が正常に戻ったか動作を確認する
その他の問題
メッシュにアクションがくっついたままExportするとUnity側でアニメーションが意図しない挙動を取ることがあった。
Nonliner Animationパネルを開いてメッシュオブジェクトの下にアクション名がある状態がそれ。
削除の仕方は、該当アクションの右側のアイコン(Push Down Action)を選択して
該当のNlaTrackを選択した状態でキーボードのXを押すと消える。
下が消えた状態
アクションは基本的にアーマチュアオブジェクトに紐づいているはずなので、元のアクションが消えてしまうことはない、はず。