【UE4】シーケンサで物理アニメーションを入れたり、無理やりアニメーションBPのアニメを上書きしたりする!【備忘録】
シーケンサで演出を作ってる時のこと
シーケンサ用のキャラクターのActorを作成し、Meshを設定する。
そのMeshのAnimationModeにはシーケンサでアニメーションをさせるために
UseCustomModeを設定する…
何のことはない、よくあるシーケンサ用のキャラクターを作っていた時のこと
物理の揺れものが揺れてないんですよね…
でも揺らすためのRigitBodyはAnimationBPのAnimGraphにつけられているノードなので
AnimationModeをUseCustomModeにしているとRigitBodyを通せないので物理が動かない…
でもUseAnimationBPにすると今度はシーケンサのアニメーションの設定を聞いてくれない…
詰んだ…
というときになんとかなる機能があると教えてもらった。
SkeltalMeshには、PostProcessAnimBlueprintという項目があり
そこにAnimationBPを設定することで、通常のAnimationBPの後に設定したPostProcessAnimBPを処理する
これのいいところは、SkeletalMeshに関連付けされるものなので、同じAnimationBPを使いまわす場合でもキャラごとの専用処理を組み込むことができること。
それと、そのSkeletalMeshを使う場合には常にその処理が実行されること。
(MeshComponent側の設定でOFFにしたりはできる)
つまり、物理挙動を行う処理を書いたPostProcessAnimBPを記述し設定することで、通常のAnimationBPを使わなくても物理挙動だけはさせ続けることができるようになるのであった。
PostProcessAnimBPの中身はこれだけでOK
InputPoseで通常のAnimationBPの最終アニメーションポーズやシーケンサで再生させたいアニメーションを持ってきて、物理設定をして終わり。
(ネットで調べたらSub-GraphInputとかいうノードを使っているが、どうも4.24ではそのノードがなくなっていてInputPoseを使えばいいらしい)
でもいろいろ用意するのが面倒だよね。という人向け
PostProcessAnimBPを使用する場合いちいちSkeletalMeshに設定しなければならず、設定し忘れたり面倒だったりするので、通常のアニメーションBPに「シーケンサがアニメーションを渡した場合、それに必ず従う」という処理を組む。
その方法はアニメーションスロットを最終アニメーションポーズ前に混ぜてしまい、
シーケンサのアニメーションの設定にあるSlotNameを合わせることで、通常のアニメーションBPを流用しながら、シーケンサのアニメーション命令を無理やり聞かせることができる処理が完成する。
割と腕力にものを言わせた処理なので、美しくはない。
また、AnimMontageなどでうっかりこのスロット名を使うと挙動がおかしくなったりして困るので、この処理を作業する人が認識していないといけないことになる。
複数人で作業する場合には結構よろしくない感じになりがち。
というわけで、シーケンサのアニメーションを再生しながら、アニメーションBPの処理も使いたいという欲張りな方法でした