AimOffsetに合わせてAnimMontageをプレイさせる
お久しぶりです。備忘録ということで記事を書きたいと思います。
記事の題名ですが、一体どういうことかというとこういうことです。
下から上に向けてAimしながら発砲しています。発砲の際に AnimMontage を再生しているのですが、どの方向を向きながらでも同じ強度でプレイされています。
今回はこの処理についての記事になります。
用意編
1 : AnimMontage を用意する
今回は銃を発砲した際の反動の AnimMontage を作成します。AnimMontage 作成方法ですが、alweiさんが詳しく解説してくださってますのでこちらの説明は丸投げします。
unrealengine.hatenablog.com
2 : Blueprint に AnimMontage をプレイさせる処理を組み込む
まず、Event BeginPlay やなんやらで mesh に Assign されている AnimationBP にキャストし、それを変数にします。こんな感じ。
そうしたら AnimInstance を引数に取る、 MontagePlay 関数で AnimMontage がプレイできるようになります。
3 : AnimationBP で Blend を行う
簡単に説明させていただきます。 BS_Walk_Jog_Run と書かれているものは、BlendSpace といって複数の Animation を一つの Animation にまとめ、X, Yのパラメーターで遷移させるといったものです。Editor自体はこんな感じ。
www.youtube.com
なお、BlendSpace の作成方法ですがこちらの公式ドキュメントをご覧ください。
docs.unrealengine.com
もうひとつの AO_AimSpace_Iron は、今回の主役である AimOffset です。こちらのEditorは先ほどの BlendSpace のEditorとあまり変わらないので割愛させていただきます。
AimOffset の作り方ですが、かなり面倒なので今回は割愛。代わりに、こちらをご覧いただければ仕組みは把握できるかと思います。
UE4 #5 Add rifle and create aim offset from AimSpace Animation - YouTube
こちらの動画の、3:50あたりから説明されています。
Slot
こちらが AnimMontage を再生するのに必要なものです。
Layered blend per bone
こちらも重要です。 Bone 毎に独立した Animation をプレイさせたいときに使用するものです。こちらを参照。
今回は spine_01 という Bone から上だけに銃の発砲の AnimMontage を適用したかったので、こんな感じになっています。
ここまで実装できれば AnimMontage は再生されます。しかし、問題点が浮上してきます。
www.youtube.com
ふざけている訳ではありません。これが現実です...。元となっている Animation が下のポーズのままのせいで、しっかりと AimOffset に合わせた AnimMontage のプレイができないのです。
実は、これの解決方法はいたってシンプルです。
AnimMontage の元になっている Animation で設定を行っていきます。
1 : Asset Details のAdditive Settings の Additive Anim Type を変更する
No Additive → Mesh Space に変更してください。
2 : 同項目内の Base Pose Type を変更する
None → Selected Animatin Frame に変更してください。
3 : Base Animation を追加する
こちらを今回は、 Aim_Space_IronSight に変更しています。
以上で完了です。プレイして試してみてください('ω')
お疲れさまでした。 良い Unreal Engine ライフをお過ごしください。