【Unity/VRChat】アニメーションのMissing もう恐れる必要はない
AnimationのMissingとは
・Hierarchy上でのオブジェクトの階層を変えたことによって起きる
・警告は出ず、アニメーションが動かなくなる
①AnimationのMissingに強いHierarchy
そもそも、
アバター
…
└剣
└盾
└弓
のようなHierarchy構造で、各アイテムをisActiveで持ちかえるようなAnimationを作る場合
アバター
…
└小物セット
└小物1
└剣
└小物2
└盾
└小物3
└弓
のような階層にして小物1~3のisActiveを切り替えるようにすると、剣を短剣に変えたり、弓を銃に変えたときにAnimationがMissingしない。動作は同じ。小物1などはCreate Emptyで作った空オブジェクトでOK。
②オブジェクトの移動
今回はアバター直下にあるこの└小物セットの階層を、ワールド固定のため別の階層下に入れたい。このような移動の操作(パスの変更)をすると、AnimationがMissingする。
変更後のHierarchy
アバター
└ワールド固定
└小物セット
このようなパターンでは、Animationのmissingを自動で修正するエディタ拡張AnimationValidatorが便利だ。
https://qiita.com/sukedon/items/71247af4a4494303dc66
少し、使い方に慣れるまで癖があると感じる。Missingしているかもしれない全てのアニメーションファイルをアバター本体にドラッグし、本体を右クリック、「アニメーションクリップ修正」でチェックする。自動修正してくれる時もあるし、見つからなかったり重複する名前があったら手動修正の手順になる。
くわしい使い方はAnimationValidatorの説明を参照してください(基本的に自動)
③アニメーションさせる対象の改名
ではAnimationValidatorで自動で修正できず、修正するべきファイルが多かったりして、手動で大変な手作業をしなければいけないときはどうすればいいか?
たとえば小物1をアイテム1などに改名すると、この方法ではパスを自動修正できない。AnimationValidatorはあくまで小物1という目的地にたどり着くまでの道すじを自動で見つけてくれるツールであり、目的そのものの名称を変更すると見つけられないからだ
こういうときはテキスト一括変更置換ツールが便利だよというのがここでの本題
1アニメーションファイル.Animはテキストエディタで開けるただの文字列ファイルである。
2アバターのHierarchy上のオブジェクトをAnimationが指定している方法もPath以下でのただの文字列指定である。
結論:テキストエディタで一括置換ができる
💮テキスト置換からMissingしたPathを一括修正する
使い方
フォルダ:ProjectのAsset以下アニメーションファイルが入っているフォルダを指定
文字コードはUTF8
フィルタは*.anim(”すべてのアニメーションファイル”に限定)
(環境によっては改行コードが違うかもしれませんが基本的にアニメーションファイルをエディタで開いて確認したときの文字コードや改行コードでOKです)
Animファイルをメモ帳で観察するとわかるが日本語はUnicodeでエンコードされてダブルクォーテーションで囲まれる(小物1は"\u5C0F\u72691"など)。
このサイトで変換しよう
実践:
今回はHierarchyの「Digital_Display/hp」を「衣装セット/その他/アクセ1/デジタル時計/時刻 1の位」に変更・移動したときアニメーションに80箇所の修正が生じたので一括修正する。
変更前のpath
path: Digital_Display/hp
変更後のpath
path: "\u8863\u88C5\u30BB\u30C3\u30C8/\u305D\u306E\u4ED6/\u30A2\u30AF\u30BB1/\u30C7\u30B8\u30BF\u30EB\u6642\u8A08/\u6642\u523B 1\u306E\u4F4D"
(↑のサイトでデコードすると"衣装セット/その他/アクセ1/デジタル時計/時刻 1の位")
バックアップは済んでいるので気軽に置換を押す。Reimport ALLするまでもなく、プロジェクト内のすべての該当するアニメーションファイルが更新されてMissingが直った
このようにアニメーションのMissingエラーを直すとき一括置換するのは有用。またアニメーションファイルに特定のプロパティを一気に登録(追加)したいときにも同じ方法を使うことができる。
まとめ
・AnimationValidatorでMissingチェックと階層変更だけのときは自動修正も可能
・アニメーションさせるオブジェクトの名称を変更したときはAnimationValidatorの手動修正でもいいし、それでも項目が多すぎて面倒なときはテキスト一括置換ツールで置換するとよい