DCCからアニメーションをUnityに持ってきてから、Timeline上のアニメーションを微調整したいといったケースがあります。例えばドラゴンが噛み付く位置が少しズレているだとか、棍棒を叩きつける位置が微妙に違う等。特にオブジェクトの配置をゲーム上で行っている場合、DCCツールとUnityエディターを行き来するのは少し面倒そうです。
ということでTimeline上で微調整してみます。なお、今回はGeneric用のアプローチについてで、Humanoid用は次回です。
1. Timeline上でアニメーションを再生する
まず最初にGenericなモデルをタイムライン上でアニメーションしている状態です。普通にアイドルモーションしています。
この状態はボーンの位置がTimelineのAnimationClipで決められているので、首を動かしたり少しズラしたりすることは出来ません。
2. モーションを編集しやすくする
ボーン構造を少しズラします。ただAnimationClipを編集するのは正直行いたくないので、FKベースでアニメーションの動きを少しオーバーライドします。
この最初の手順は、リグを視覚的に見やすくします。
Aniamtion Rigging
のBone Renderer
コンポーネントを使用して、ボーン構造をSceneView上に表示します。
メッシュのボーン構造(動かすとモデルが変形する、OptimizedGameObjectで非表示になるGameObject)をBoneRendererのTransformsにドラッグ&ドロップすれば、ボーン構造が視覚的に確認出来るようになります。また、ボーン構造それ自体を選択しやすくなり、編集しやすくなります。
3. アニメーションをオーバーライドする
Timeline上のアニメーションをオーバーライドします。
- AnimationTrackを右クリックして
Add Override Track
を選択 レコードボタン
を押してレコード開始- 動かしたいタイミングでキーフレームを登録
これでTimeline上でアニメーションを少し編集出来ますが、少し問題があります。
4. オーバーライドしたアニメーションの範囲を限定する
上の手順でアニメーションを編集した場合、編集した内容が最初から最後まで反映されっぱなしになります。特定の瞬間だけ上書きしたいので、これは望ましくありません。
なのでアニメーションの範囲を限定し、ついでにオーバーライドするアニメーションが既存のアニメーションに自然につながるようにします。
- AnimationTrackで
Convert to clip track
を選択 - 変換したAnimationClipを選択
Ease in duration
とEase out duration
に0以外を設定
これでGenericなキャラクターの動きを微調整出来ます。
感想
実際には完全オーバーライドよりお「+N°回す」的な方が多いかもしれません。そういったものはLateUpdateで補正するなり、色々と。
なおこのアプローチの本質は「Genericモーションを作って上書き」なので、Humanoidの場合は別のアプローチが必要になります。それは次回。
関連
今回使用したモデル