【Unity】Animationのカーブ対象とオブジェクト名が不一致でMissingが起こした際に何とかする手軽な方法
今回はちょっとしたTipsです。
Unityでアニメーションを作成した際、AnimationClipに登録したボーン構造と、GameObjectの名前が一致してない場合、AnimationClipにMissing!と表示され動作しなくなります。
Avaterのようなリターゲットの仕組みを使っているなら兎も角、Unity内で作成したアニメーションは名前(パス)で操作先を取得しているので、こういった事が起こります。
どのように起こるのか?
例えば下のような感じです。
Animationで、Boneというオブジェクトを動かしています。
何を思ったのか、オブジェクトの名称をGameObjectに変更します。
そうすると名前で解決できなくなるのでMissingになります。
こうなるとアニメーションは「GameObject」オブジェクトを動かせません。
パスを修正する
パスをエディター機能で修正します。
実はパスはクリックして編集が可能みたいです。
下のGifアニメのように、クリックして新しいパスを入力すれば、Missingを解決可能です。
深いパスでは自動化が必要な事も
少し厄介なのが、この手法では「一つのパスしか修正出来ない」事です。
この問題は、下の画像のような複数階層のパスを持っている状態で、中間のオブジェクトを変更した際に起こります。
実はAnimationClipの名前は、下のような階層化している訳ではありません。
・Root
・Bone
・Cube
実際には下のような構造です。
・Root
・Root/Bone
・Root/Bone/Cube
その為、Boneオブジェクトの名前をSpine等に変更した場合、中間のSpineオブジェクトの名前を変更するだけでは不十分です。パス全てを変更してやる必要が出てきます。
・Root
・Root/Spine
・Root/Bone/Cube ←上のパスだけ変更してもMissingになる
一括で修正する
一括で修正する方法を考えた所、自分でブログに書いてました。
こちらの記事で紹介されているエディター拡張を使用すると、一括でパスを置換できます。
関連
UnityTipsで紹介された内容からアイディアを得ました。
In Unity: need to switch animators between objects and want to preserve your clips? It'll work, but you'll need to update the curves' targets. Click and wait, and some hidden info will reveal itself. Maaaaaaaagic. #unitytips pic.twitter.com/nFT3xCIwCo
— Hwaet (@HwaetGames) 2018年2月6日