🚶

AnimationControllerで制御しているキャラクタにAnimationClipのアニメーションを割り込ませる

2022/06/23に公開

概要

AnimationControllerのようなステート駆動のアニメーションシステムはパラメータによる制御を行う際は便利だが、突発的なアニメーションの割り込みを実装しようとすると制御が煩雑になる。
UnrealEngineにはアニメーションモンタージュがあるが、UnityではStateMachineのAnyステートから遷移するくらいしかない。
そこでPlayableGraphを自作し、AnimationControllerに個別のAnimationClipを上書きしブレンドすることで、突発的なアニメーションの割り込みを実現する。

https://github.com/TytoMan/UnityUtilities/blob/main/AnimationInjector/AnimationInjector.cs

使いかた

用意されている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