AnimationControllerで制御しているキャラクタにAnimationClipのアニメーションを割り込ませる
概要
AnimationControllerのようなステート駆動のアニメーションシステムはパラメータによる制御を行う際は便利だが、突発的なアニメーションの割り込みを実装しようとすると制御が煩雑になる。
UnrealEngineにはアニメーションモンタージュがあるが、UnityではStateMachineのAnyステートから遷移するくらいしかない。
そこでPlayableGraphを自作し、AnimationControllerに個別のAnimationClipを上書きしブレンドすることで、突発的なアニメーションの割り込みを実現する。
使いかた
用意されているpublic関数は
- SetAnimation
- ResetAnimation
- PlayAnimation
の3つで、InspectorからはfullBodyMaskを指定することができる。
SetAnimation
第一引数で指定されたアニメーションを再生する。第三引数でAvatarMaskを指定すると、AnimationControllerで制御されたアニメーションをベースに体の一部分に対してブレンドすることもできる。PlayAnimationとの違いはアニメーションの再生が終わってもAnimationControllerのアニメーションに自動的に遷移しない点。対象のAnimationClipのループが有効になっていれば再生され続ける。
ResetAnimation
SetAnimation及びPlayAnimationによって再生されたアニメーションを強制的に停止し、AnimationControllerのアニメーションに遷移する。
PlayAnimation
概ねSetAnimationと同様だが、fadeInTimeとfadeOutTimeを指定し、アニメーションの再生が終わると自動的にAnimationControllerのアニメーションに遷移する。
fullBodyMask
SetAnimationとPlayAnimationでAvatarMaskを指定しなかった際に使用されるAvatarMask。インスペクタから設定しなければ自動的にHumanoidの全身のマスクが設定されるが、制御するキャラクタがHumanoidでなければ、全身を設定したAvatarMaskアセットを設定する必要がある。
Discussion